无法使用get()从输入字段将值读入新变量

2024-04-24 05:55:46 发布

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

我想用python3.4编写一个小程序,在这个程序中,我必须输入一个全名,比如"Gumbo Froehn",然后程序将它拆分为名字和姓氏。但是,我在读取输入字段时遇到问题。你知道吗

这是我的代码(到目前为止):

from tkinter import *                   
from tkinter import ttk                 


class FullScreenApp(object):                        # Klasse fuer die Vollbild Darstellung
    def __init__(self, master, **kwargs):
        self.master=master
        pad=3
        self._geom='200x200+0+0'
        master.geometry("{0}x{1}+0+0".format(
            master.winfo_screenwidth()-pad, master.winfo_screenheight()-pad))
        master.bind('<Escape>',self.toggle_geom)
    def toggle_geom(self,event):
        geom=self.master.winfo_geometry()
        print(geom,self._geom)
        self.master.geometry(self._geom)
        self._geom=geom


mainWindow = Tk()                                   # Generiert das Hauptfenster aus tkinter
app=FullScreenApp(mainWindow)                       # Ruft Klasse fuer Vollbild-Darstellung auf
mainWindow.title("Mark's Latex Code Generator")     # Definiert den fenster-Titel



fullname = StringVar()
LBLeingabename = Label(mainWindow, text="Write full name:").place(x=20, y=350)
EFvollername = Entry(mainWindow,textvariable=str(fullname), width=50)
EFvollername.place(x=200,y=350)

splitname = fullname.get().split()


LBtestausgabe = Label(mainWindow, text="Testausgabe").place(x=20, y=770)
TFtestausgabe = Text(mainWindow, height=5,width=50)
TFtestausgabe.place(x=20,y=800)



def test():
    TFtestausgabe.insert(END, EFvollername.get()+"\n")
    TFtestausgabe.insert(END, splitname.get()+"\n")
    TFtestausgabe.insert(END, type(fullname))

Btn = ttk.Button(mainWindow, text="OK",command=test).place(x=450,y=800)

mainloop()  # Haelt das Programm offen bis es beendet wird

当我运行这个程序时,只有行TFtestausgabe.insert(END, EFvollername.get()+"\n")在工作,它给出了我的全名。你知道吗

我想使用StringVar变量fullname进行字符串拆分操作。但这还不行。当我使用.set()fullname变量中输入预定义的名称时,它就起作用了。你知道吗

我做错什么了?我是否有一些代码行的顺序错误?你知道吗


Tags: self程序mastergettkinterdefplaceend
1条回答
网友
1楼 · 发布于 2024-04-24 05:55:46
EFvollername = Entry(mainWindow,textvariable=str(fullname), width=50)

不要将textvariable转换为字符串。将其保留为StringVar:

EFvollername = Entry(mainWindow,textvariable=fullname, width=50)

您还需要移动splitname = fullname.get().split(),使其位于test内。实际上,您在文本框创建后的几秒钟内就可以得到值,因此在您得到值之前,用户没有时间实际键入任何内容。你知道吗

另外,splitname.get()也不起作用,因为splitname是一个列表,而列表没有get方法。我不太清楚你想在那条线上做什么,但也许你想要TFtestausgabe.insert(END, str(splitname)+"\n")?你知道吗


顺便说一句,当您将小部件分配给变量时,不应该在同一行上使用place方法。因为place返回None,这就是变量的值。有关详细信息,请参见Why do my Tkinter widgets get stored as None?。你知道吗

相关问题 更多 >