2017-03-16 25 views
2

フルスクリーンのTkinter GUIで異なるボタンを押すプログラムを作成しようとしています。これらのボタンのプリフォームの操作は私の質問には関係ありませんが、ユーザーがボタンを押すことを確認するためのポップアップダイアログ(askokcancel)の作成に問題があり、「ok」を押すとそのボタンの残りのコードを正常に実行します。現在、私はこのプログラムでは、ここで私は私のpythonファイルを含むフォルダにディレクトリを変更し、それが私をロードする必要がありデスクトップから実行するとtkMessageBoxポップアップが表示されず、起動時に表示される

sudoのナノ/ etc/profileを

を介してアクセス、起動から/ etc/profileファイルを走るいますコードを起動して起動すると、正しくボタンがロードされ、正しいボタンを押すと、ポップアップウィンドウが全画面ウィンドウに表示されます。しかし、デスクトップシェルでコードを実行しようとすると、ボタンを押すとポップアップウィンドウが表示されますが、ルートウィンドウの背後には表示されません。他の場所をクリックすることはできません。「タブ」と「入力」を押すと、2つの選択肢の間をナビゲートして1つを選択できますが、それを見ることはできません。シェルに単語を印刷するボタンがあるので、実際にはポップアップウィンドウが表示されています。

全画面では、タスクバーやその他のオプションを隠して、overrideredirect関数を使用します。これがFALSEに設定されている場合、ポップアップは意図したとおりに動作しますが、GUIを画面上の唯一のものにしようとしています。ここで

は、私のコードの要約版です:

from Tkinter import* 
import tkMessageBox 

class Application(Frame): 
    def run(self): 
     tkMessageBox.askokcancel("Run Confirmation!", "Are you sure?") 
     print "RUN Code Intitates" 

    def createWidgets(self): 
     self.button1 = Button(self,height=15,width=20) 
     self.button1["command"] = self.run 
     self.button1.pack({"side": "left"}) 

    def __init__(self, master=None): 
     Frame.__init__(self, master) 
     self.pack() 
     self.createWidgets() 

root = Tk() 
w, h = root.winfo_screenwidth(), root.winfo_screenheight() 
root.overrideredirect(1) 
root.geometry("%dx%d+0+0" % (800, 480)) 

app = Application(master=root) 
app.mainloop() 
root.destroy() 

私はコンピュータサイエンスの主要決して午前のみ数週間のためにラズベリーパイ、Tkinterの、とPythonでの作業なので、私ならばされています基本的な何かが欠けている私は謝罪する。私は私の画面としてラズベリーパイのために作られた8" タッチスクリーンディスプレイを使用しています

答えて

-1

tcl/tk documentationによると:。

ウィンドウはウィンドウマネージャによって無視 することの原因となるため、オーバーライドリダイレクトフラグを設定します;とりわけ、これは ウィンドウが装飾 フレームにルートウィンドウからリペアレントされず、ユーザが 通常ウィンドウマネージャ機構

を使用してウィンドウを操作することができないことを意味します

したがって、ウィンドウが常に動作するとは限りません(Windowsの場合はあまりありません)。例えば、Linuxでは、ウィンドウはキーボードフォーカス(python tkinter overrideredirect; cannot receive keystrokes (Linux))を取得しません。あなたが本当に気にするとフルスクリーンGUIを持っているのであれば

  • 、ちょうど

    root.overrideredirect(1)

    によって

    root.attributes('-fullscreen', True)

    を交換し、ウィンドウにメッセージので、正常に動作しますボックスがメインウィンドウの上部に表示されます。

  • Linuxでのもう一つの可能​​性は、これは、ドックのように、少なくともXFCEウィンドウを治療するためのウィンドウマネージャを伝え

    root.attributes('-type', 'dock')

    によって

    root.overrideredirect(1)

    を交換することです装飾のないウィンドウが常に他のウィンドウの上に表示されますが、その上にメッセージボックスが表示されます。

関連する問題