在程序下方使用一个Tkinter小部件

2024-04-19 19:09:07 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我尝试制作这个tkinter GUI,您可以在其中添加或搜索客户(客户存储在SQlite数据库中)。问题是,我看不到一种在按下addcustomer按钮时生成def的方法,因为据我所知,我需要在创建小部件的程序中使用下面的变量名称。我可以切换函数的顺序,但是小部件将调用尚未创建的函数。有人能帮忙解决这个问题吗?提前谢谢

代码如下:

    from tkinter import *

app = Tk()
app.minsize(400,420)
app.title("Gatecode Manager")
app.resizable(False, False)

def add():
    first = createWindow().firstAdd.get()
    last = createWindow().firstAdd.get()
    phone = createWindow().numberAdd.get()


def createWindow():
    Label(text="Welcome to Gatecode Manager", font=("bold", 17)).grid(row=0, columnspan=2, pady=30, sticky=N)

    Label(text="Search for a Customer").grid(row=1, column=0, padx=30, pady=10)
    Label(text="First Name:").grid(row=2, column=0, padx=30, pady=10)
    firstSearch = Entry().grid(row=3, column=0, padx=30)
    Label(text="Last Name:").grid(row=4, column=0, padx=30, pady=10)
    lastSearch = Entry().grid(row=5, column=0, padx=30)

    Label(text="Add Customer to System").grid(row=1, column=1, padx=30, pady=10)
    Label(text="First Name:").grid(row=2, column=1, padx=30, pady=10)
    firstAdd = Entry().grid(row=3, column=1, padx=30)
    Label(text="Last Name:").grid(row=4, column=1, padx=30, pady=10)
    lastAdd = Entry().grid(row=5, column=1, padx=30)
    Label(text="Phone Number:").grid(row=6, column=1, padx=30, pady=10)
    numberAdd = Entry().grid(row=7, column=1, padx=30)
    add = Button(text="Add", command="null").grid(padx=30, pady=10, column=1)

    app.mainloop()

createWindow()

Tags: textnameappgettkinterdefcolumnlabel
1条回答
网友
1楼 · 发布于 2024-04-19 19:09:07

我发现很难准确理解您希望这个程序如何运行。add按钮是否应该调用函数add(),然后该函数调用createWindow()

我猜这里有一点,但是关于:

1)不要在函数中创建GUI。函数将使变量保持在函数的作用域内

2)使用StringVar()访问条目。由于您不保存条目的标识,因此无法对其进行查询

例如:

from tkinter import *

app = Tk()
app.minsize(400,420)
app.title("Gatecode Manager")
app.resizable(False, False)

def add():
    first = firstAddVar.get()
    last = firstAddVar.get()
    phone = numberAddVar.get()

Label(text="Welcome to Gatecode Manager", font=("bold", 17)).grid(row=0, 
      columnspan=2, pady=30, sticky=N)
Label(text="Search for a Customer").grid(row=1, column=0, padx=30, pady=10)
Label(text="First Name:").grid(row=2, column=0, padx=30, pady=10)
firstSearchVar = StringVar()
firstSearch = Entry(textvar=firstSearchVar).grid(row=3, column=0, padx=30)
Label(text="Last Name:").grid(row=4, column=0, padx=30, pady=10)
lastSearchVar  = StringVar()
lastSearch = Entry(textvar=lastSearchVar).grid(row=5, column=0, padx=30)

Label(text="Add Customer to System").grid(row=1, column=1, padx=30, pady=10)
Label(text="First Name:").grid(row=2, column=1, padx=30, pady=10)
firstAddVar = StringVar()
firstAdd = Entry(textvariable=firstAddVar).grid(row=3, column=1, padx=30)
Label(text="Last Name:").grid(row=4, column=1, padx=30, pady=10)
lastAddVar = StringVar()
lastAdd = Entry(textvariable=lastAddVar).grid(row=5, column=1, padx=30)
Label(text="Phone Number:").grid(row=6, column=1, padx=30, pady=10)
numberAddVar = StringVar()
numberAdd = Entry(textvariable=numberAddVar).grid(row=7, column=1, padx=30)
add = Button(text="Add", command=add).grid(padx=30, pady=10, column=1)

app.mainloop()

当您的GUI变得更复杂时,您应该学习OOP

相关问题 更多 >