2016-07-18 6 views
0
from openpyxl import * 
from tkinter import * 

def inputGetter(str): 
    print(str, end="") 
    return input() 



class StartPage(Frame): 
    global app 
    def say_hi(self): 
     test = SecondPage(master=root) 
     app.destroy() 
     test.mainloop() 

    def createWidgets(self): 
     self.QUIT = Button(self) 
     self.QUIT["text"] = "QUIT" 
     self.QUIT["fg"] = "red" 
     self.QUIT["command"] = self.quit 

     self.QUIT.pack({"side": "left"}) 

     self.hi_there = Button(self) 
     self.hi_there["text"] = "Hello", 
     self.hi_there["command"] = self.say_hi 

     self.hi_there.pack({"side": "left"}) 

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

class SecondPage(Frame): 
    global app 
    def say_hi(self): 
     print('test') 

    def createWidgets(self): 
     self.QUIT2 = Button(self) 
     self.QUIT2["text"] = "QUIT2" 
     self.QUIT2["fg"] = "red" 
     self.QUIT2["command"] = self.quit 

     self.QUIT2.pack({"side": "left"}) 

     self.hi_there = Button(self) 
     self.hi_there["text"] = "Second", 
     self.hi_there["command"] = self.say_hi 

     self.hi_there.pack({"side": "left"}) 

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

root = Tk() 
app = StartPage(master=root) 

app.mainloop() 
root.destroy() 

私はQUITウィジェットを押すと何らかの理由で動作しますが、SecondPageクラスにあるQUIT2ウィジェットは2回クリックする必要があります。これを行うコードに何が間違っていますか?なぜtkinter QUIT2ウィジェットを起動するには2回押す必要がありますか?

歓声、マルク・

+0

一般的には、tkinterプログラムでは 'mainloop()'を正確に1回呼び出す必要があります。 –

答えて

3

次の2つのmainloopsを起動し、したがって、あなたのプログラムを残すために「終了」への2つのコールが必要です。

  1. どちらかあなたが通訳(暗黙のメインループ)からスクリプトを起動したり、rootたり、メインプログラム(あなたの例では見えますが、最初のウィンドウを表示するために何らかの形で必要ではない)でappメインループを呼び出します。
  2. あなたは、私が期待されるふるまいのかわからないが、それは2 mailoopsが生じず、かつquitには2つの呼び出しが両方を残すために必要とされるStartPage.say_hi

に2 NDメインループを起動します。 をStartPage.say_hiから削除すると、問題はなくなります。

+0

ありがとう、スーパーは助けて! –

関連する問題