
少し前から、Tkinterを使って居りウィンドウを常に最前面に表示したいと思い立ちwin32guiとwin32conと言うモジュールが必要で、インポートするところまで辿り着いたのは良いのですが、その後がよくわかりません。
実験的に
from Tkinter import *
import win32gui,win32con
root = Tk()
win32gui.SetWindowPos(root,win32con.HWND_TOPMOST,0,0,200,150,win32con.SWP_SHOWWINDOW)
root.mainloop()
のようなコードを実行してみたのですが以下のようなエラーメッセージが帰ってきます。
Traceback (most recent call last):
File "C:\Documents and Settings\PC USER\デスクトップ\Python\q2.py", line 9, in -toplevel-
win32gui.SetWindowPos(root,win32con.HWND_TOPMOST,1,1,100,50,win32con.SWP_SHOWWINDOW)
AttributeError: Tk instance has no attribute '__int__'
引数の与え方もいろいろなサイトの切れ端を集めたような感じで書いてしまったのでそもそもの書き方が違っているのかもしれません。
私の検索が不足なのは重々承知ですが、よろしければ実際にはどのように書けばウィンドウを最前面に出すことができるのかと、エラーメッセージの具体的な意味を教えて欲しいです。お願いします。
No.1ベストアンサー
- 回答日時:
どうやら無理そうです。
エラーがでている直接的な原因は、
win32gui.SetWindowPos(root,win32con.HWND_TOPMOST,...)
では、Windowsオブジェクト(この場合rootという名前のTk()のインスタンス)の__int__メソッドが呼ばれるのですが、そもそもTk()には、
これがないためです。
ここで呼び出されようとするものは、
ウィンドウハンドラであり(詳しくは”HWND”とググって下さい)
これを渡しています。
HWND=winfo_id()なのかな?ということで、変えてみます。
--------------------------------------------------------------
from Tkinter import *
import win32gui
import win32con
root = Tk()
hwnd = root.winfo_id()
win32gui.SetWindowPos(hwnd,win32con.HWND_TOPMOST,0,0,0,0,
win32con.SWP_NOMOVE | win32con.SWP_NOSIZE)
root.mainloop()
--------------------------------------------------------------
エラーは出なくなりますが、最前面固定にはなりません。
Tkの動きをWindowsのAPIが変えようとしているわけですが、
ネットで調べてみても、win32で、WindowsネイティブのAPIでGUIを作っている例はありますが、Tkでの成功例は見当たりませんでした。
短時間に再描画を繰り返すというあんまりな回避策はありましたが、、、。
Tkinterのもとは、Tkですが、Tkだけではそこまで出来なさそうなのと、
Tkinter(Python←→Tk)
win32all(Python←→Windows)のつなぎのモジュールなので、
Windowsネイティブな高度な操作は、Tkinterでは、多分できないと思います。
常に最前面に出す必要のあるウィンドウといえばエラーダイアログですが、xwPythonならば、”そのアプリ内で”常に再前面のということができます。
他のアプリも含め、すべてのウィンドウより前面に出したいとなると、やはり難しいと思われます。GUI全部を、win32gui を使って書くしかないかもしれません。
(常に最前面に出すということは良く考えると危ういものです。)
また、本質問の回答からはそれますが、
個人的には、Tkinterだけでなくwin32allも入れるくらいなら
いっそのこと、wxPythonを使って書いたほうがよいと思います。
(Tkinterは、ピュアPythonにこだわりたいときとかで、Javaでいうawt,swingという位置づけで考えています。リッチなことをやろうというときは、SWT等を使うように、wxPythonがお勧めです。)
回答ありがとうございます。
うーん、無理っぽいんですか・・・
wxPythonも後で調べて見ます。
詳しい解説までして頂きありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Ruby パイソンエラーについて 1 2022/12/24 14:07
- その他(プログラミング・Web制作) pythonのグローバル変数 2 2022/11/25 18:02
- C言語・C++・C# ExcelCS 1 2023/01/27 19:47
- その他(プログラミング・Web制作) pythonで、tkinterとpillowの組み合わせ 2 2022/08/16 17:42
- その他(プログラミング・Web制作) tkinterのimport文の書き方 2 2022/10/14 21:17
- その他(プログラミング・Web制作) pythonをjupiter notebookからmecabで頻出の高い単語の抽出について(Runt 1 2022/12/17 18:08
- Visual Basic(VBA) Vba LongPtrについて教えてください 2 2022/08/19 11:14
- その他(プログラミング・Web制作) I2C接続のLCDディスプレイを使う 2 2023/05/01 17:15
- 据え置き型ゲーム機 Switch Joy-Conの接続不良について 1 2022/07/24 23:08
- その他(プログラミング・Web制作) LCD ディスプレイを Raspberry Pi Pico に接続する 1 2023/04/25 16:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
3つのMCが全てクリックされた...
-
ボタンを押した後○秒後に消える
-
リンクでのエスケープシーケン...
-
外部mp3をストリーミング再生...
-
外部swfが作動しない
-
else if文の順序を変えることに...
-
ランダムな動きのスピード制御...
-
レイヤーに配置されたムービー...
-
FlashのActionScriptについて。
-
ライブラリにある画像をaction ...
-
ActionScript 孫のパス
-
HTMLからFLASHに変数を送り、内...
-
FLASH オブジェクトをスクリプ...
-
forを使ってまとめたいのですが
-
flash 大きさの異なる写真のス...
-
指定するタイムラインの非表示
-
MCの中のダイナミックテキスト...
-
特定のムービークリップの上で...
-
_widthから数値を導き出したい
-
スライドプレゼンテーション機...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
python ボタンを押すと複数の関...
-
四乗根を英語で言うと・・・
-
else if文の順序を変えることに...
-
Pythonを使ってせん断応力図、...
-
ADに参加していないPCからADサ...
-
線と点の当り判定
-
for文の変数の扱いについて
-
pythonの画像の貼り付けについて
-
ムービークリップ
-
パーセントで配置したフラッシ...
-
アクションスクリプトで
-
SNMPの標準MIBについて
-
PythonでSetWindowPosを使うに...
-
Pythonのtkinterについて
-
「XEON」って何て読むのですか?
-
loadMovieとonEnterFrameについて
-
ムービークリップ内のボタン
-
すみません、(2)のやり方を大至...
-
すべてのMCを1フレーム目へ
-
脱出ゲームを作るときのアクシ...
おすすめ情報