Python 如何使用Tkinter基于数据库查询动态标记我的按钮

Python 如何使用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",

我正在尝试根据数据库结果动态标记我的按钮。因此,在这种情况下,按钮将标记为“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()

如果你是另一个没有它们的例子,那么:

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中传播。谢谢,这很有意义。