• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PythonでSetWindowPosを使うにはどうしたら良いでしょうか?)

PythonでSetWindowPosを使う方法

このQ&Aのポイント
  • PythonでSetWindowPosを使ってウィンドウを最前面に表示する方法について教えてください
  • Tkinterとwin32gui、win32conモジュールを使ってウィンドウを最前面に表示しようとしていますがエラーが発生しています
  • ウィンドウを最前面に表示するための正しい方法と、エラーメッセージの意味について教えてください

質問者が選んだベストアンサー

  • ベストアンサー
回答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がお勧めです。)

yorutrain
質問者

お礼

回答ありがとうございます。 うーん、無理っぽいんですか・・・ wxPythonも後で調べて見ます。 詳しい解説までして頂きありがとうございました。

関連するQ&A