簡體   English   中英

在 tkinter 中更改時如何使 StringVar 更新其值?

[英]How to make a StringVar update its value when changing in tkinter?

import tkinter as tk
from tkinter import *
from math import *
from turtle import delay
from pylab import *
import time

my_w = tk.Tk()
my_w.geometry("200x500")  # Size of the window 
my_w.title("Puls")  # Adding a title

sv = StringVar() #string variable 
sb = Spinbox(my_w,textvariable=sv, width=15,from_=0,to=100)
sb.grid(row=1,column=1,padx=50,pady=10)

sc = Scale(my_w, from_=0, to=100,orient=HORIZONTAL,variable=sv)
sc.grid(row=2,column=1,padx=50)

def f(x): 
    return 0.45*x**3-8*x**2+52*x+66

x = float(sv.get())
y = f(x)

label = tk.Label(
    text=y,
    height=5
)

label.grid(row=3,column=1,padx=50)

label2 = tk.Label(
    text=x,
    height=5
)

label2.grid(row=4,column=1,padx=50)

my_w.mainloop()  # Keep the window open

我需要改變變量,這樣我的函數才能真正起作用。 我該怎么做? 現在我認為代碼可以工作,但是由StringVar確定的變量x僅在開始時的某一點被賦值。

每當sv的值更改時,您都可以使用sv.trace_add(...)執行函數:

...

# used to show the result of f(x)
label = tk.Label(height=5)
label.grid(row=3, column=1, padx=50)

# used textvariable=sv to show the 'x' value
label2 = tk.Label(textvariable=sv, height=5)
label2.grid(row=4, column=1, padx=50)

def on_change(*args):
    x = float(sv.get())
    y = round(f(x), 2)  # change 2 to whatever value you want
    label.config(text=y)

sv.trace_add('write', on_change) # call on_change() whenever sv is changed
on_change() # show initial result

my_w.mainloop()

您必須在進行計算時調用sv.get() ,而不是之前。

def do_func():
    x = float(sv.get())
    y = f(x)
    label.configure(text=y)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM