Python tkinter-如何获取变量中的输入数据

Python tkinter-如何获取变量中的输入数据,python,python-3.x,tkinter,tkinter-entry,Python,Python 3.x,Tkinter,Tkinter Entry,我正在为本地供应商制作一个工人管理应用程序。我声明的textvariables工作不正常。在savedata函数中,我总是在控制台上得到0,而不是得到输入的idNumber 如何从我的textvariable获取数据 from tkinter import * root = Tk() 在这里声明变量 idNumber = IntVar() Name = StringVar() FName = StringVar() Address = StringVar() Mobile = StringVa

我正在为本地供应商制作一个工人管理应用程序。我声明的textvariables工作不正常。在savedata函数中,我总是在控制台上得到0,而不是得到输入的idNumber 如何从我的textvariable获取数据

from tkinter import *
root = Tk()
在这里声明变量

idNumber = IntVar()
Name = StringVar()
FName = StringVar()
Address = StringVar()
Mobile = StringVar()
IDCard = StringVar()
DOJ = StringVar()
Skill = StringVar()
Wage = StringVar()
OT = StringVar()
主Gui窗口

class mainWindow:
    def __init__(self):
        pass

    def MainWindow(self, mainW):
        mainW.config(background='black')
        Label(mainW, text='Welcome to Worker Management App...', font=('Comic Sans MS', 32, 'bold'), fg='white',
              bg='black').grid(row=1, column=1)
        Label(mainW, text='Choose a category:', font=('Comic Sans MS', 32, 'bold'), fg='white', bg='black').grid(row=2,
                                                                                                                 column=1)
        Label(mainW, bg='black').grid(row=3, column=1)
        Label(mainW, bg='black').grid(row=4, column=1)
        Button(mainW, text='1. Individual', font=('Comic Sans MS', 28), fg='white', bg='black', command=guiIndi).grid(
            row=5, column=1)
        Label(mainW, bg='black').grid(row=6, column=1)
        Label(mainW, bg='black').grid(row=7, column=1)
        b2 = Button(mainW, text='2. Contractor', font=('Comic Sans MS', 28), fg='white', bg='black')
        b2.grid(row=8, column=1)
        Label(mainW, bg='black').grid(row=9, column=1)


def guiIndi():
        B1 = Button(root, text='Register New', font=('Comic Sans MS', 20), fg='white', bg='black')
        B1.place(x=100, y=285)

        indi = Individual()

        B1.config(command=indi.IndiGui)
        B2 = Button(root, text='Existing', font=('Comic Sans MS', 20), fg='white', bg='black')
        B2.place(x=580, y=285)
        Label(root, bg='black', fg='white').grid(row=7)
        Label(root, bg='black', fg='white').grid(row=8)
        Label(root, bg='black', fg='white').grid(row=9)
        Label(root, bg='black', fg='white').grid(row=10)
我正在尝试访问数据的函数

def savedata(idNumber, Name, FName, Address, Mobile, IDCard,DOJ, Skill, Wage, OT):

    print(idNumber.get())
要输入数据的类别:

class Individual():
    def __init__(self):
        pass

    def IndiGui(self):
        b = Tk()
        b.config(background='black')
        # cursor.execute('''
        # CREATE TABLE users(id INTEGER PRIMARY KEY, name TEXT,fname TEXT,
        #                 address TEXT, mobile TEXT,idcard TEXT ,
        #             doj TEXT, skill TEXT, wage TEXT, ot TEXT)
        # ''')
        # db.commit()

        Label(b, fg='white', bg='black').grid(row=0)
        l1 = Label(b, text='ID Number: ', fg='white', bg='black')
        l1.grid(row=1, column=0, sticky=W, padx=15)
        e1 = Entry(b, textvariable=idNumber)
        e1.grid(row=1, column=1, sticky=W, padx=15)
        Label(b, fg='white', bg='black').grid(row=2)
        l2 = Label(b, text='Name: ', fg='white', bg='black')
        l2.grid(row=3, column=0, sticky=W, padx=15)
        e2 = Entry(b, textvariable=Name)
        e2.grid(row=3, column=1, sticky=W, padx=15)
        Label(b, fg='white', bg='black').grid(row=4)
        l3 = Label(b, text="Father's Name:  ", fg='white', bg='black')
        l3.grid(row=5, column=0, sticky=W, padx=15)
        e3 = Entry(b, textvariable=FName)
        e3.grid(row=5, column=1, sticky=W, padx=15)
        Label(b, fg='white', bg='black').grid(row=6)
        l4 = Label(b, text='Address: ', fg='white', bg='black')
        l4.grid(row=7, column=0, sticky=W, padx=15)
        e4 = Entry(b, textvariable=Address)
        e4.grid(row=7, column=1, sticky=W, padx=15)
        Label(b, fg='white', bg='black').grid(row=8)
        l5 = Label(b, text='Mobie Number ', fg='white', bg='black')
        l5.grid(row=9, column=0, sticky=W, padx=15)
        e5 = Entry(b, textvariable=Mobile)
        e5.grid(row=9, column=1, sticky=W, padx=15)
        Label(b, fg='white', bg='black').grid(row=10)
        l6 = Label(b, text='ID Card Number: ', fg='white', bg='black')
        l6.grid(row=11, column=0, sticky=W, padx=15)
        e6 = Entry(b, textvariable=IDCard)
        e6.grid(row=11, column=1, sticky=W, padx=15)
        Label(b, fg='white', bg='black').grid(row=12)
        l7 = Label(b, text='Date of Joining: ', fg='white', bg='black')
        l7.grid(row=13, column=0, sticky=W, padx=15)
        e7 = Entry(b, textvariable=DOJ)
        e7.grid(row=13, column=1, sticky=W, padx=15)
        Label(b, fg='white', bg='black').grid(row=14)
        l8 = Label(b, text='Skill: ', fg='white', bg='black')
        l8.grid(row=15, column=0, sticky=W, padx=15)
        e8 = Entry(b, textvariable=Skill)
        e8.grid(row=15, column=1, sticky=W, padx=15)
        Label(b, fg='white', bg='black').grid(row=16)
        l9 = Label(b, text='Wages: ', fg='white', bg='black')
        l9.grid(row=17, column=0, sticky=W, padx=15)
        e9 = Entry(b, textvariable=Wage)
        e9.grid(row=17, column=1, sticky=W, padx=15)
        Label(b, fg='white', bg='black').grid(row=18)
        l9 = Label(b, text='Over Time: ', fg='white', bg='black')
        l9.grid(row=19, column=0, sticky=W, padx=15)
        e9 = Entry(b, textvariable=OT)
        e9.grid(row=19, column=1, sticky=W, padx=15)
        Label(b, fg='white', bg='black').grid(row=20)
        b1 = Button(b, text='Go', fg='white', bg='black', font=(14))
        b1.grid(row=21, column=0, columnspan=2)
        b1.config(command=lambda: 
       savedata(idNumber,Name,FName,Address,Mobile,IDCard,DOJ,Skill,Wage,OT))

        Label(b, fg='white', bg='black').grid(row=22)
        b.mainloop()




app = mainWindow()
app.MainWindow(root)

root.mainloop()

快速修复方法是将类Individual:中的b=Tk更改为b=Toplevelroot。除此之外,正如我在评论中提到的,您需要重新编写一些代码,使其更加枯燥

我觉得您可以从看到这段代码的外观中受益,它是以干燥的方式编写的,并且遵循PEP8标准

以下是您重新编写的代码,以便更好地遵循PEP8和干式实践。更少的空白下面的代码只有42行代码

import tkinter as tk


lbl_list = ['ID Number: ', 'Name: ', "Father's Name:  ", 'Address: ',
            'Mobie Number ', 'ID Card Number: ', 'Date of Joining: ',
            'Skill: ', 'Wages: ', 'Over Time: ', 'Go']

string_var_list = []
entry_list = []

font32 = ('Comic Sans MS', 32, 'bold')
font28 = ('Comic Sans MS', 28, 'bold')
font20 = ('Comic Sans MS', 20)


class MainWindow(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.config(background='black')
        tk.Label(self, text='Welcome to Worker Management App...', font=font32, fg='white', bg='black').grid(row=1, column=0, columnspan=3)
        tk.Label(self, text='Choose a category:', font=font32, fg='white', bg='black').grid(row=2, column=0, columnspan=3)
        tk.Button(self, text='1. Individual', font=font28, fg='white', bg='black', command=self.gui_indi).grid(row=3, column=1, pady=25)
        b2 = tk.Button(self, text='2. Contractor', font=font28, fg='white', bg='black')
        b2.grid(row=4, column=1, pady=25)

    def gui_indi(self):
        B1 = tk.Button(self, text='Register New', font=font20, fg='white', bg='black')
        B1.grid(row=2, column=0, rowspan=3, sticky="e")
        B1.config(command=lambda: Individual(self))
        B2 = tk.Button(self, text='Existing', font=font20, fg='white', bg='black')
        B2.grid(row=2, column=2, rowspan=3, sticky="w")

    def savedata(self):
        for strvar in string_var_list:
            print(strvar.get())


class Individual(tk.Toplevel):
    def __init__(self, master):
        tk.Toplevel.__init__(self)
        self.config(background='black')

        for i in range(len(lbl_list)):
            string_var_list.append(tk.StringVar())
            entry_list.append(tk.Entry(self, textvariable=string_var_list[i]))

        for ndex, lbl_name in enumerate(lbl_list):
            if lbl_name != "Go":
                tk.Label(self, text=lbl_name, fg='white', bg='black').grid(row=ndex+1, column=0, sticky="w", padx=15)
                entry_list[ndex].grid(row=ndex+1, column=1, sticky="w", padx=15, pady=10)
            else:
                tk.Button(self, text=lbl_name, fg='white', bg='black', font=(14), command=self.master.savedata).grid(row=21, column=0, columnspan=2, pady=10)


app = MainWindow()
app.mainloop()

欢迎来到StackOverflow。请按照您创建此帐户时的建议,阅读并遵循帮助文档中的发布指南。适用于这里。在您发布MCVE代码并准确描述问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中,并重现您描述的问题。这段代码并不是最简单的:似乎您将整个应用程序转储到了发布中。如果您的问题是从条目小部件获取数据,那么示例程序中只需要一个条目小部件,再加上其他代码就可以复制您的问题。我们不需要几十个其他小部件。快速修复方法是在类Individual:中将b=Tk更改为b=Toplevelroot。除此之外,您还需要重新编写一些代码,使其更完善。当出现此问题时,通常是因为用户在程序中多次调用Tk。乍一看,您似乎正在使用它来创建一个弹出窗口。将Tk替换为Toplevel以生成弹出窗口。Tk只能使用一次,以制作主窗口。@Novel告诉您:PHey,非常感谢!我从两个小时前就明白了这一点,这就是为什么我对代码做了一些修改。但我还是要记住这一点,现在这很好用。