我正在尝试根据数据库结果动态标记我的按钮。所以在这种情况下,按钮将被标记为“23”
数据库
|编号 |数|
| 1 | 23
from tkinter import *
import pymysql as mdb
from tkinter import ttk
#functions
def functionHolder():
print("do nothing function holder")
root = Tk()
dbi = mdb.connect("localhost",port=3306, user="access", passwd="***", db="index_db" )
cursor = dbi.cursor()
cursor.execute("""SELECT number FROM caution_elements WHERE id = 1 """)
dbi.commit()
data = cursor.fetchone()[0]
dbi.close()
result =str("%s " % data)
varButt = Button(root,textvariable=data, command=functionHolder)
varButt.pack()
root.mainloop()
按钮应该被标记为 [23] 我目前得到一个空白按钮并且没有错误
最佳答案
tkinter 小部件的 textvariable
选项需要特殊的变量类,例如 StringVar
、BooleanVar
或 IntVar
。可以使用 get
方法访问它们的值,并且可以使用 set
更改它们的值,如下所示:
import tkinter as tk
root = tk.Tk()
data = tk.StringVar()
data.set("This")
def change():
if data.get() == "This":
data.set("That")
else:
data.set("This")
tk.Label(root, textvariable=data).pack()
tk.Button(root, text="Change", command=change).pack()
root.mainloop()
如果你是not sure about using class variables没有它们的另一个例子是:
import tkinter as tk
root = tk.Tk()
data = "This"
def change():
global data
if data == "This":
data = "That"
a_label['text'] = data
else:
data = "This"
a_label.config(text=data)
a_label = tk.Label(root, text=data)
a_label.pack()
tk.Button(root, text="Change", command=change).pack()
root.mainloop()
两个代码片段做同样的事情,除了当你改变 data
的值时,在第一个例子中你也改变了标签显示的文本,而在第二个例子中你需要显式更新 a_label
的文本选项。
另请注意,您可以使用 a_widget.config(option=value)
、a_widget.configure(option=value)
、a_widget['option'] = value
可互换,因为您正在修改只有一个选项。
关于python - 如何使用 Tkinter 根据数据库查询动态标记我的按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47665365/