所以我正在尝试为程序获取文本输入,但是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="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
),以及为什么在我输入文本并再次单击按钮后却什么都不做(所以据我了解它只能工作一次并且自动运行,首先在输入框中没有文本,按钮自动运行,因此传递一个空字符串
答案 0 :(得分:1)
您应该使用entryname.get()来获取该条目内的文本,而不是声明stringVar()并使它变得更不可读且难以理解和使用。但这是我的观点! – Tiago Oliveira 48分钟前
我认为正在发生的事情是,您在声明条目小部件至极之后立即使用该方法,这意味着您将要获得“”空字符串,因为那儿没有写任何东西,您需要在命令参数上替换为entryname.get( )而不是声明变量= entryname.get()并将其作为参数wich传递将始终为空!希望这会有所帮助!