python - 如何从 Tkinter 的输入框中获取输入文本?
问题描述
所以我试图为我的程序获取文本输入,但 tkinter 似乎没有注册它,我不知道我做错了什么
window = self.newWindow(value)
label = tk.Label(window, text="Intfix to Postfix Convert")
label.place(x=0, y=20)
e1 = tk.Entry(window)
text = e1.get()
e1.place(x=0, y=50)
rezultat = tk.Text(window, width=20, height=3)
rezultat.place(x=0, y=80)
button = tk.Button(window, text="Enter")
button.place(x=127, y=46)
button.bind("<Double-Button-1>", self.passValue(rezultat, text))
我的代码看起来像这样。其他一切都在工作self.newWindow(value)
只是一个从主窗口创建一个新窗口的功能
所以我说text=e1.get()
但我运行了调试器,它说它是一个空字符串,我想通过函数传递这个文本passValue()
(一个将值传递给控制器的函数),我曾经button.bind()
这样做。那样行吗?
我通过在 text like 中放置一个默认值来测试它,text="My name"
它确实传递了该值,因此应该是有序的,但我不知道为什么它不能像它应该的那样从输入框中获取它。
我什至尝试过e1.insert(0,"some random thing")
,text= e1.get()
它确实得到了它,所以我认为输入有问题。
我需要使用某种特殊的输入功能吗?
整个代码:
class Gui:
def __init__(self, controller):
self.main = tk.Tk()
self.main.title("DSA Quiz Helper")
self.__controller = controller
def IntFixPostExecute(self, event):
widget = event.widget
selection = widget.curselection()
value = widget.get(selection[0])
self.IntfixPostfixWindow(value)
def mainWindow(self):
self.main.geometry("800x500")
# to do scrollbar
lb = tk.Listbox(self.main, width=50, height=30)
lb.insert(1, "Intfix and Postfix Calculator")
lb.insert(2, "Something else")
lb.bind("<Double-Button-1>", self.IntFixPostExecute)
lb.pack()
def IntfixPostfixWindow(self, value):
window = self.newWindow(value)
label = tk.Label(window, text="Intfix to Postfix Convert")
label.place(x=0, y=20)
e1 = tk.Entry(window)
text = e1.get()
e1.place(x=0, y=50)
rezultat = tk.Text(window, width=20, height=3)
rezultat.place(x=0, y=80)
button = tk.Button(window, text="Enter")
button.place(x=127, y=46)
button.bind("<Double-Button-1>", self.passValue(rezultat, text))
print(text)
def passValue(self, rezultat, value):
returnValue = self.__controller.InfixToPostC(rezultat, value)
rezultat.insert(tk.INSERT, returnValue)
def newWindow(self, msg):
newwind = tk.Toplevel(self.main)
q1 = tk.Frame(newwind)
q1.pack()
newwind.geometry("500x230")
return newwind
def run(self):
self.mainWindow()
self.main.mainloop()
如果我手动设置它就可以了。我不明白为什么我不能通过输入框输入工作
text = tk.StringVar()
e1 = tk.Entry(window, textvariable=text)
text.set("x+y*2")
text = e1.get()
e1.place(x=0, y=50)
我想我想通了(如果我错了,请纠正我)。我认为按钮存在问题,因为一旦打开新窗口,按钮就会自动单击自身,而最初在输入框中还没有写入文本(因此它会使用初始文本发送到控制器(其中是空的))。问题是为什么按钮会自动单击(或无论如何自动运行该功能passValue
)以及为什么在我输入文本并再次单击按钮后它什么也不做(据我所知,它只工作一次并自动运行,起初输入框中没有文本,按钮自动运行,因此传递一个空字符串
解决方案
您应该使用 entryname.get() 来获取该条目中的文本,而不是声明 stringVar() 并使其更加难以理解和难以理解和使用。但这是我的观点!– Tiago Oliveira 48 分钟前
我认为发生的事情是您在声明条目小部件后立即使用该方法,这意味着您将获得一个“”空字符串,因为那里没有写任何内容,您需要在命令上替换带有 entryname.get() 的参数,而不是声明 variable = entryname.get() 并将其作为参数传递,这将始终为空!希望这可以帮助!
推荐阅读
- javascript - 添加新元素后如何清除输入字段?
- c++ - unordered_map 中带有初始化参数的自定义相等比较器
- javascript - 定义文件的打字稿输出文件错误
- javascript - Angular Material 不适用于 Angular 元素
- python - 如何将特定的熊猫列与熊猫中匹配的字典键/值对相乘
- node.js - 看不到多次调用 res 导致错误的位置:在将标头发送到客户端后无法设置标头
- python - Flask.session cookie 被标记为第 3 方?
- r - 未将行添加到R中的数据框
- powershell - 需要为多台服务器重启多个应用程序池
- reactjs - React Native Material UI KeyboardDatePicker 设置光标位置