【发布时间】:2021-04-08 15:33:34
【问题描述】:
我还不能在问题帖子中添加图片。
下面的问题:
我的应用当前使用一个在类中编码的窗口。
我的最终目标是在将字母和数字输入到条目小部件时按 Enter,然后按 Enter,然后该功能将更新与我的主窗口中的标签相关的文本。
详细说明如下:
我不知道如何创建和输入,然后绑定输入键,这样当我运行我的应用程序时,我可以单击输入,输入一个值并按 Enter。
我看到很多按钮引用并且我可以让按钮工作,但我正在尝试学习如何做事并且不想在这种情况下依赖按钮。
我在其他一些帖子中看到,如果您使用条目对象调用.get,python 代码将执行它并继续前进。我在按回车键时要调用的函数中使用 print 语句进行了测试,并且在我在 entry 小部件中键入任何内容之前,该 print 语句出现在终端中。然后我尝试输入并按回车,没有任何反应。
我应该放弃绑定 ENTER 键并作为规则坚持使用 tkinter 中的按钮,还是有适当的方法来做到这一点?在我的代码示例中,您将看到 up_R 是我在按下 Enter 时尝试执行的函数。如果我使用up_R(),它会立即执行。如果我使用up_R,则会收到 TCL 错误。
具体部分代码如下:
def up_R():
print('Makes it here')
self.R.update_disp(self.e.get())
self.e.bind('<ENTER>',up_R)
如果需要帮助,完整代码如下:
#NOAA SPACE WEATHER CONDITIONS
from tkinter import *
class window:
def __init__(self):
#main window
self.window = Tk()
self.window.title('NOAA SPACE WEATHER CONDITIONS')
self.window.geometry('800x600')
#window organization
self.window.grid_rowconfigure(0, weight = 1)
self.window.grid_rowconfigure(1, weight = 1)
self.window.grid_columnconfigure(0, weight = 1)
self.window.grid_columnconfigure(1, weight = 1)
#temp entry frame
self.e = Entry(self.window)
self.e.grid(row = 1, column = 0, sticky=N)
self.e.insert(END, 'R entry')
#init class R
self.R = R()
#init class S
self.S = S()
#init class g
self.G = G()
#frame for RSG
self.frame = Frame(self.window)
self.frame.grid(row = 0, column = 0, columnspan = 2, padx=10, pady=10)
#disp class R
self.rf = Frame(self.frame, highlightbackground='black', highlightcolor='black', highlightthickness=1)
self.rf.pack(side = LEFT)
self.rl = Label(self.rf, text = self.R.dkey, bg='#caf57a')
self.rl.pack(side=TOP)
self.rl_lower = Label(self.rf, text= self.R.tile_text, bg='#caf57a')
self.rl.pack(side=BOTTOM)
#Value update methods
# self.R.update_disp(self.e.get())
# #action
def up_R():
print('Makes it here')
self.R.update_disp(self.e.get())
self.e.bind('<ENTER>',up_R())
#main window call - goes at end of class
self.window.mainloop()
class R:
def __init__(self):
d = {'R':'None','R1':'Minor','R2':'Moderate','R3':'Strong','R4':'Severe','R5':'Extreme'}
self.dkey = 'R'
self.tile_text = d[self.dkey]
print(d[self.dkey])
def update_disp(self, dkey):
self.dkey = dkey
class S:
d = {'S1':'Minor','S2':'Moderate','S3':'Strong','S4':'Severe','S5':'Extreme'}
pass
class G:
d = {'G1':'Minor','G2':'Moderate','G3':'Strong','G4':'Severe','G5':'Extreme'}
pass
t = window()
【问题讨论】:
-
我刚刚整理了你的帖子。代码块需要要么缩进或用三个反引号(
```)围起来,而不是两者兼而有之。请注意,这些必须是 反引号,而不是单引号 (')。 -
self.e.bind('<ENTER>',up_R())应该改为self.e.bind('<Return>', lambda e: up_R())。
标签: python tkinter tkinter-entry