2017-04-10 90 views
-1

我試圖在從我的縮放小部件達到特定值之後向Tkinter中的文本小部件插入文本。然而,好像我的if語句不起作用,並且在按下calculate按鈕後沒有任何內容插入到文本小部件中。在達到回調值後插入文本 - Tkinter文本小部件

self.dU = Scale(self.f2, from_=100, to=-100) 
self.calculate_button = Button(self.f2, text="Calculate", command=self.calculate) 

self.results_display = Text(self.f3, height=10, width=62) 
self.results_display.pack() 
self.results_display.configure(state=DISABLED) 

def results_text(self): 
    if self.dU.get() > 0: 
     self.results_display.configure(state=NORMAL) 
     self.results_display.insert(END, "dU > 0, internal energy of the particles increases, therefore temperature increases.") 
     self.results_display.configure(state=DISABLED) 

def calculate(self): 
    self.results_text() 
+0

你需要更具體一點關於你期待看到和解釋實際發生的事情。 –

回答

0

在您的代碼中,您正在執行if語句,該語句在創建比例尺後約1毫秒。

如果您希望在值更改時調用if語句,請配置該比例的command參數。

例如:

self.du = Scale(..., command=self.scale_changed) 
... 
def scale_changed(self, value): 
    value = int(value) 
    if value > 0: 
     ... 

注:即使self.du.get()會在這種情況下返回一個整數,當前值傳遞給scale_changed爲字符串。

+0

我編輯了我的問題,請您再次查看。我想在按下計算按鈕後將文本添加到我的文本小部件中。在這種情況下,當dU> 0時,沒有任何內容插入到文本小部件中。 –

0

您的if語句有效,但在程序啓動時只調用一次。我猜你想每次滑塊的值發生變化時都要執行該檢查。要做到這一點,你需要使用一個變量,並把它放在上面:

self.dU = tk.IntVar() 
    self.dU.trace('w', self.check) 
    s = tk.Scale(self, variable=self.dU, from_=100, to=-100) 
    s.pack() 

    self.results_display = tk.Text(self, height=10, width=62) 
    self.results_display.pack() 
    self.results_display.configure(state=tk.DISABLED) 

def check(self, *args): 
    if self.dU.get() > 0: 
     self.results_display.configure(state=tk.NORMAL) 
     self.results_display.insert(tk.END, "dU > 0, internal energy of the particles increases, therefore temperature increases.") 
     self.results_display.configure(state=tk.DISABLED) 
相關問題