Python 如何使用Tkinter基于数据库查询动态标记我的按钮
我正在尝试根据数据库结果动态标记我的按钮。因此,在这种情况下,按钮将标记为“23” 数据库 |身份证号码| |1 | 23Python 如何使用Tkinter基于数据库查询动态标记我的按钮,python,mysql,tkinter,Python,Mysql,Tkinter,我正在尝试根据数据库结果动态标记我的按钮。因此,在这种情况下,按钮将标记为“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",
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()
如果你是另一个没有它们的例子,那么:
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()
这两个代码段的作用相同,只是当您更改数据的值时,在第一个示例中,您还更改了标签显示的文本,在第二个示例中,您需要显式更新标签的文本选项
还请注意,如果只修改一个选项,则可以互换使用a_widget.config(option=value)
,a_widget.configure(option=value)
,a_widget['option']=value
。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()
如果你是另一个没有它们的例子,那么:
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()
这两个代码段的作用相同,只是当您更改数据的值时,在第一个示例中,您还更改了标签显示的文本,在第二个示例中,您需要显式更新标签的文本选项
另外请注意,如果您只修改了一个选项,您可以互换地使用a_widget.config(option=value)
,a_widget.configure(option=value)
,a_widget['option']=value
。您不需要str(%s”%data)
转换为字符串-使用str(data)
或%s“%data
如果结尾需要空格。textvariable=
需要特殊的类tkinter.StringVar()
。如果您的数字在result
中,则使用text=result
或甚至text=data
您所说的“标签[23]”是什么意思?你是说按钮上的文本吗?result=str(data)varButt=button(root,text=result,command=functionHolder)varButt.pack()工作了!!!感谢您不需要将str(“%s”%data)
转换为字符串-如果您需要在末尾留出空间,请使用str(data)
或%s”%data
。textvariable=
需要特殊的类tkinter.StringVar()
。如果您的数字在result
中,则使用text=result
或甚至text=data
您所说的“标签[23]”是什么意思?你是说按钮上的文本吗?result=str(data)varButt=button(root,text=result,command=functionHolder)varButt.pack()工作了!!!感谢您,当您将标签文本绑定到类似StringVar()的数据时,当您通过调用set()
方法data.set('hello')
以编程方式更新StringVar值时,您将看到按钮上的文本也发生了神奇的变化。这就是Tkinter事件驱动GUI世界的一部分魅力所在。正确配置后,您可以在一个地方进行更改,并且可以在整个GUI中传播。这非常有意义。此外,当您将标签文本绑定到类似StringVar()的数据时,当您通过调用set()
方法data.set('hello')
以编程方式更新StringVar值时,你会看到按钮上的文字也发生了神奇的变化。这就是Tkinter事件驱动GUI世界的一部分魅力所在。一旦配置正确,您可以在一个地方进行更改,并且可以在整个GUI中传播。谢谢,这很有意义。