少し前から、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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
pythonの画像の貼り付けについて
-
photoshopで書いた四角の枠の中...
-
ダブルクリックと2回クリックの...
-
画面の範囲選択
-
static関数がmapファイルに載ら...
-
変数に256文字以上のテキストを...
-
setIntervalの解除方法について
-
C言語でのマウスを移動とマウス...
-
楕円の軌道に傾斜をつける方法...
-
全てのテキストボックスをセル...
-
VBAで改行の入ったデータの正規...
-
VB.NETでパラメータクエリを使...
-
RPG(AS400)の本、サイトってあ...
-
VB6.0 でメニューを作りたいん...
-
五芒星は、悪魔崇拝とどういう...
-
IP Address 入力フォームについて
-
C# chart controlの透過について
-
sendAndLoadでcgiからの戻り値...
-
インスタンスとポインタ
-
ボタンの上にカーソルを置いた...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Pythonを使ってせん断応力図、...
-
python ボタンを押すと複数の関...
-
else if文の順序を変えることに...
-
SNMPの標準MIBについて
-
四乗根を英語で言うと・・・
-
ADに参加していないPCからADサ...
-
PythonでSetWindowPosを使うに...
-
pythonのグローバル変数
-
ゲージと連動したムービークリ...
-
レーダーチャートの描画
-
SharedObjectの動作がうまくい...
-
リンゲージの設定
-
loadMovie()を組み込んだswfフ...
-
100点でクリアする簡単なモグラ...
-
flashでURLからのデータ取得
-
StandardMLの二分木に関する問...
-
経過時間を計るには
-
グローバル変数の呼び出し
-
ムービークリップの拡大縮小
-
Excel VBAで読み込んだテキスト...
おすすめ情報