达到回调值后插入文本 - Tkinter Text Widget

时间:2017-04-10 17:55:03

标签: python-2.7 tkinter

我尝试在从我的缩放小部件到达某个值后,在Tkinter中向文本小部件插入文本。但是,似乎我的if语句不起作用,并且在按下计算按钮后没有任何内容插入到文本小部件中。

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()

2 个答案:

答案 0 :(得分:0)

在您的代码中,您在创建比例后大约一毫秒执行if语句。

如果您希望在值更改时调用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

答案 1 :(得分: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)