Python tkinter get() 从另一个函数

发布于 2024-12-28 14:24:05 字数 2742 浏览 2 评论 0原文

def CreateGUI():
    WinCreate=Toplevel(master)
    WinCreate.attributes("-toolwindow",1)
    WinCreate.resizable(0,0)
    WinCreate.transient(master)
    WinCreate.grab_set()
    sideframe=Frame(WinCreate,bd=2,relief=GROOVE)
    Label(WinCreate,text="                        logbook                         ",fg="White",bg="#3b5998",font=("RoyalBavarian",20)).pack(side=TOP,fill=X)
    Label(sideframe,text="Name: ",fg="Black",font=("Tahoma",12)).grid(row=0,column=0,sticky=E)
    Label(sideframe,text="Age: ",fg="Black",font=("Tahoma",12)).grid(row=1,column=0,sticky=E)
    Label(sideframe,text="Gender: ",fg="Black",font=("Tahoma",12)).grid(row=2,column=0,sticky=E)
    Label(sideframe,text="Eye Color: ",fg="Black",font=("Tahoma",12)).grid(row=3,column=0,sticky=E)
    txtName=Entry(sideframe)
    txtAge=Entry(sideframe)
    txtEye=Entry(sideframe)
    txtName.grid(row=0,column=1)
    txtAge.grid(row=1,column=1)
    var=StringVar(sideframe)
    var.set("Male")
    optGender=OptionMenu(sideframe,var,"Male","Female")
    optGender.grid(row=2,column=1)
    txtEye.grid(row=3,column=1)
    sideframe.pack(side=LEFT,pady=7,padx=7,ipady=3,ipadx=3)
    rightside=Frame(WinCreate,height=116,width=283)
    irighttop=Frame(rightside,bd=2,relief=GROOVE)
    irightbottom=Frame(rightside,bd=2,width=274,height=50,relief=GROOVE)
    Label(irighttop,text="Username: ",fg="Black",font=("Tahoma",12)).grid(row=0,column=0,sticky=E)
    Label(irighttop,text="Password: ",fg="Black",font=("Tahoma",12)).grid(row=1,column=0,sticky=E)
    Label(irighttop,text="Confirm Password: ",fg="Black",font=("Tahoma",12)).grid(row=2,column=0,sticky=E)
    txtUsername=Entry(irighttop)
    txtPassword=Entry(irighttop)
    txtConPass=Entry(irighttop)
    txtUsername.grid(row=0,column=1)
    txtPassword.grid(row=1,column=1)
    txtConPass.grid(row=2,column=1)
    irighttop.pack(side=TOP,ipady=3,ipadx=3)
    btnCreateFinal=Button(irightbottom,text="Create",fg="Black",command=Create(txtName,txtAge,txtEye,var,txtPassword,txtConPass,txtUsername))
    btnCancel=Button(irightbottom,text="Cancel",fg="Black")
    btnCreateFinal.pack(side=LEFT)
    btnCancel.pack(side=RIGHT)
    irightbottom.pack_propagate(0)
    irightbottom.pack(side=BOTTOM,ipady=3,ipadx=3)
    rightside.pack_propagate(0)
    rightside.pack(side=RIGHT)
def Create(txtName,txtAge,txtEye,var,txtPassword,txtConPass,txtUsername):
    choice='1'
    password="blank"
    conpassword="blank2"
    #----------------------
    name=txtName.get()
    age=txtAge.get()
    gender=var.get()
    eye=txtEye.get()
    password=txtPassword.get()
    conpassword=txtConPass.get()

我的问题是,如果输入框位于另一个函数中,如何从输入框中获取数据?所有输入框都在 CreateGUI() 函数中。我想将变量 txtName 等传递给 Create() 函数。这个方法正确吗?

def CreateGUI():
    WinCreate=Toplevel(master)
    WinCreate.attributes("-toolwindow",1)
    WinCreate.resizable(0,0)
    WinCreate.transient(master)
    WinCreate.grab_set()
    sideframe=Frame(WinCreate,bd=2,relief=GROOVE)
    Label(WinCreate,text="                        logbook                         ",fg="White",bg="#3b5998",font=("RoyalBavarian",20)).pack(side=TOP,fill=X)
    Label(sideframe,text="Name: ",fg="Black",font=("Tahoma",12)).grid(row=0,column=0,sticky=E)
    Label(sideframe,text="Age: ",fg="Black",font=("Tahoma",12)).grid(row=1,column=0,sticky=E)
    Label(sideframe,text="Gender: ",fg="Black",font=("Tahoma",12)).grid(row=2,column=0,sticky=E)
    Label(sideframe,text="Eye Color: ",fg="Black",font=("Tahoma",12)).grid(row=3,column=0,sticky=E)
    txtName=Entry(sideframe)
    txtAge=Entry(sideframe)
    txtEye=Entry(sideframe)
    txtName.grid(row=0,column=1)
    txtAge.grid(row=1,column=1)
    var=StringVar(sideframe)
    var.set("Male")
    optGender=OptionMenu(sideframe,var,"Male","Female")
    optGender.grid(row=2,column=1)
    txtEye.grid(row=3,column=1)
    sideframe.pack(side=LEFT,pady=7,padx=7,ipady=3,ipadx=3)
    rightside=Frame(WinCreate,height=116,width=283)
    irighttop=Frame(rightside,bd=2,relief=GROOVE)
    irightbottom=Frame(rightside,bd=2,width=274,height=50,relief=GROOVE)
    Label(irighttop,text="Username: ",fg="Black",font=("Tahoma",12)).grid(row=0,column=0,sticky=E)
    Label(irighttop,text="Password: ",fg="Black",font=("Tahoma",12)).grid(row=1,column=0,sticky=E)
    Label(irighttop,text="Confirm Password: ",fg="Black",font=("Tahoma",12)).grid(row=2,column=0,sticky=E)
    txtUsername=Entry(irighttop)
    txtPassword=Entry(irighttop)
    txtConPass=Entry(irighttop)
    txtUsername.grid(row=0,column=1)
    txtPassword.grid(row=1,column=1)
    txtConPass.grid(row=2,column=1)
    irighttop.pack(side=TOP,ipady=3,ipadx=3)
    btnCreateFinal=Button(irightbottom,text="Create",fg="Black",command=Create(txtName,txtAge,txtEye,var,txtPassword,txtConPass,txtUsername))
    btnCancel=Button(irightbottom,text="Cancel",fg="Black")
    btnCreateFinal.pack(side=LEFT)
    btnCancel.pack(side=RIGHT)
    irightbottom.pack_propagate(0)
    irightbottom.pack(side=BOTTOM,ipady=3,ipadx=3)
    rightside.pack_propagate(0)
    rightside.pack(side=RIGHT)
def Create(txtName,txtAge,txtEye,var,txtPassword,txtConPass,txtUsername):
    choice='1'
    password="blank"
    conpassword="blank2"
    #----------------------
    name=txtName.get()
    age=txtAge.get()
    gender=var.get()
    eye=txtEye.get()
    password=txtPassword.get()
    conpassword=txtConPass.get()

My question here is how can I get data from the entry boxes if they are in another function? All the entry boxes are in CreateGUI() function. I thought to pass the variables txtName etc to the Create() function. Is this method correct?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

み格子的夏天 2025-01-04 14:24:05

GUI 编程通常在类内完成:

class SimpleApp(object):
    def createGUI(self):
        ...
        self.txtName=Entry(sideframe)
        self.txtName.grid(row=0,column=1)

    def create(self):
        ...
        name=self.txtName.get()

通过将 txtName 设为 self 的属性,您可以使用 self.txtName 在其他方法中访问其值。其他变量也可以用同样的方法处理。

GUI programming is usually done inside a class:

class SimpleApp(object):
    def createGUI(self):
        ...
        self.txtName=Entry(sideframe)
        self.txtName.grid(row=0,column=1)

    def create(self):
        ...
        name=self.txtName.get()

By making txtName an attribute of self, you can access its value in other methods with self.txtName. The other variables can be handled the same way.

伪心 2025-01-04 14:24:05

为您的 Entry 小部件提供一个 StringVar 实例来存储输入非常有用。

  self.myStringVar = tk.StringVar()
  self.myEntryWidget = tk.Entry(self.myFrame,textvariable=self.myStringVar)
  self.myEntryWidget.grid(row=1,column=1)

然后在您调用的其他函数中:

  self.myStringVar.get()

这在类中效果更好,因为它使 GUI 更易于管理。

It is useful to give your Entry widgets a StringVar instance to store input.

  self.myStringVar = tk.StringVar()
  self.myEntryWidget = tk.Entry(self.myFrame,textvariable=self.myStringVar)
  self.myEntryWidget.grid(row=1,column=1)

Then in some other function you call:

  self.myStringVar.get()

This is all better off inside a class as it makes the GUI much easier to manage.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文