2017-04-10 39 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) 
相关问题