
少し前から、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ランキング
-
python ボタンを押すと複数の関...
-
パーセントで配置したフラッシ...
-
PythonでSetWindowPosを使うに...
-
acttionscript2.0から3.0へ。。...
-
レーダーチャートの描画
-
SharedObjectの動作がうまくい...
-
行動によって実行する指示と実...
-
スクロール処理(早急にお伺い...
-
マウス自体の移動量の取得
-
始めたばかりのVCで
-
FlashでXMLを読み込んだ際の関...
-
全てのテキストボックスをセル...
-
【Flash】アクションスクリプト...
-
フレームアクションで色の変更...
-
テキストボックスの中身をリセ...
-
flash as3 ムービークリップの...
-
VBAで改行の入ったデータの正規...
-
漢字入力した値のカタカナ変換...
-
static関数がmapファイルに載ら...
-
ボタンのクリックカウントでフ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
python ボタンを押すと複数の関...
-
四乗根を英語で言うと・・・
-
PythonでSetWindowPosを使うに...
-
else if文の順序を変えることに...
-
SNMPの標準MIBについて
-
スライドショーの制御
-
Pythonを使ってせん断応力図、...
-
レーダーチャートの描画
-
FlashCS5 ActionScript2.0で3...
-
ADに参加していないPCからADサ...
-
addchildからrootに命令
-
pythonの画像の貼り付けについて
-
C++インタプリタを探してます
-
複数の外部SWFの読み込みする場...
-
node* ってなんなのでしょうか?
-
クリックされたインスタンス以...
-
acttionscript2.0から3.0へ。。...
-
ムービーをクリックしてボタン...
-
スライドショーのフェードイン...
-
goto文が動かない orz
おすすめ情報