我想在Python 3.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
变量中输入预定义名称时,它可以正常工作。
我做错了什么?我是否有一些错误的代码行?
答案 0 :(得分:0)
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?。