Python 我正试图用一个变量更新tkinter标签,但标签显示为空
我知道有很多类似的帖子,但我找不到解决办法。我试图用tk.StringVar变量更新标签,但每次运行它时,它都是空的。如果我把文字放进去,效果很好。我给同一个变量起了一个不同的名字,看看它是否有区别,它没有 这是标签,功能如下,谢谢您的帮助Python 我正试图用一个变量更新tkinter标签,但标签显示为空,python,tkinter,Python,Tkinter,我知道有很多类似的帖子,但我找不到解决办法。我试图用tk.StringVar变量更新标签,但每次运行它时,它都是空的。如果我把文字放进去,效果很好。我给同一个变量起了一个不同的名字,看看它是否有区别,它没有 这是标签,功能如下,谢谢您的帮助 park1=selected_park.get() Label(newWindow, textvariable=park1, width=20, fg="black", font=("bold", 12), bd=1,
park1=selected_park.get()
Label(newWindow, textvariable=park1, width=20, fg="black", font=("bold", 12), bd=1, relief="raised").grid(row=0, col
def search_hikes():
try:
park = selected_park.get()
difficulty = selected_diff.get()
print(park, difficulty)
except Exception as e:
print(e)
messagebox.showinfo("Tkinter", "Select State, Park, and Difficulty.")
raise Exception
try:
rows_p, num_rows_p = search_parks_in_dbs(park, difficulty)
except Exception as e:
messagebox.showinfo("Tkinter", "Database error")
exit()
if num_rows_p == 0:
messagebox.showinfo("Database Error", "No results")
else:
newWindow = tk.Toplevel(form)
newWindow.title("Search Results")
newWindow.geometry("1200x800")
park1=selected_park.get()
Label(newWindow, textvariable=park1, width=20, fg="black", font=("bold", 12), bd=1, relief="raised").grid(row=0, column=3)
table = ttk.Treeview(newWindow, columns=(1, 2, 3, 4, 5, 6, 7), height=80, show="headings")
table.heading(1, text="Hike Name")
table.heading(2, text="Length(Mi)")
table.heading(3, text="Elevation Gain(ft)")
table.heading(4, text="Nearest City")
table.heading(5, text="Location")
table.heading(6, text="Difficulty")
table.heading(7, text="Route Type")
table.column(1, width=300)
table.column(2, width=80)
table.column(3, width=80)
table.column(4, width=80)
table.column(5, width=150)
table.column(6, width=130)
table.column(7, width=130)
labelframe = Frame(newWindow)
labelframe.grid(row=2, column = 0, columnspan=7, pady=10)
parklabel =Label(newWindow,textvariable = park, width=20, font=("bold", 12), bd=1, relief="raised")
table.grid(row=2, column=0, columnspan=7, padx=20, pady=20)
parklabel.grid(row=2, column = 0, columnspan=7)
for row in rows_p:
table.insert('', 'end', values=(row[0], row[1], row[2], row[3], row[4], row[5], row[6]))
def search_parks_in_dbs(park, difficulty):
try:
con = open_database()
except Exception:
messagebox.showinfo("Database connection error")
exit()
messagebox.showinfo("Connected to Database", "DB Connection OK")
try:
sql = "SELECT h.hike_name, h.length_miles, h.elevation_gain_feet, h.nearest_city, " \
"h.geo_location, d.difficulty_name, r.route_name " \
"FROM `park_tbl` p, `hike_tbl` h, `park-hike_rtbl` ph, `difficulty_tbl` d, `hike-difficulty_rtbl` hd, " \
"`route_tbl` r, `hike-route_rtbl` hr " \
"WHERE p.park_name = %s AND d.difficulty_level =%s AND p.park_id = ph.park_id " \
"AND h.hike_id = ph.hike_id AND h.hike_id = hd.hike_id AND d.difficulty_id = hd.difficulty_id " \
"AND h.hike_id = hr.hike_id AND r.route_id = hr.route_id"
vals = (park, difficulty)
print(sql)
num_of_rows, rows = query_database(con, sql, vals)
except DatabaseError:
messagebox.showinfo("Error querying the database")
return rows, num_of_rows
正如@acw1668所注意到的-
textvariable=
需要StringVar
,而不是string
-因此您必须在没有.get()
的情况下分配所选内容(因为.get()
为您提供字符串
)
现在,您可以使用
selected_park.set("new_text")
似乎park1
是一个字符串(选中的结果\u park.get()
),那么为什么要在textvariable
选项中使用字符串?StringVar
在有两个Tk()时可能不起作用
在代码中-但我没有看到@acw1668注意到-您需要textvariable=selected\u park
而不是textvariable=park1
。在所有textvariable=
中都存在相同的问题,因为textvariable
需要StringVar
,而不是string
。当您在Label
中指定textvariable=selected\u park
时,您可以使用selected\u park.set(“new\u text”)
更改Label中的文本。是的,StringVar从组合框中更新,因此不需要使用textvariable=selected\u park以外的任何内容。我已经用.get()试过了,但当然没用。我现在明白为什么了。它现在工作得很好。谢谢大家!
selected_park.set("new_text")