【发布时间】:2023-01-27 08:54:03
【问题描述】:
我是编程的新手,之前也从未在此论坛上发帖,所以如果我的问题不清楚或者我没有使用正确的术语,我会提前道歉,但我真的很感激一些帮助。
我使用 Python 3.7.0 和 Tkinter 创建了一个简单的飞行员日志程序。 已编辑部分个人信息的屏幕截图: Log book screenshot
我已经使用显式语句(如下所示的示例代码)创建并打包了标题框架。
接下来我有一个“数据”框架,我在其中循环遍历字典。对于字典中的每个项目,我将一行新数据打包到数据框中(示例代码如下所示)。
我遇到的问题是,当我单击数据框中的一行(以允许编辑该行)时,我想调用回调函数。但是,无论我单击哪一行,我似乎只能得到打包到框架中的字典中的最后一项。
有什么方法可以调用打包的帧的特定实例而不是最终帧?
示例显式标题框架代码:
# Heading Frame:
self.heading_year_frame = tk.Frame(self.headingframe)
self.heading_year_entry = tk.Label(self.heading_year_frame, width=self.entrywidth, text="YEAR", anchor='sw', font = self.fontsize, bd = 1, relief = "flat")
self.heading_year_entry.pack(side='left', fill='y')
heading_frames.append(self.heading_year_frame)
...
self.heading_details_frame = tk.Frame(self.headingframe)
self.heading_details_entry = tk.Label(self.heading_details_frame, width=self.bigentrywidth*2, text="DETAILS", anchor='sw', font = self.fontsize, bd = 1, relief = "flat")
self.heading_details_entry.pack(side='left', fill='y')
heading_frames.append(self.heading_details_frame)
...
# Pack the heading frames
for f in heading_frames:
f.pack(side='left', fill='both')
使用 FOR 循环和字典生成的示例帧:
def pack_entry(self):
self.dataframe_regen = tk.Frame(self.dataframe)
self.dataframe_regen.pack(side='top', fill='both')
for i in self.flight_list[self.m:self.n]:
self.i = self.flight_data[i]
self.entry_year = (self.flight_data[i]["year"])
.....
self.entry_details = (self.flight_data[i]["details"])
.....
self.entry_year_frame = tk.Frame(self.subdataframe)
self.entry_year_entry = tk.Label(self.entry_year_frame, width=self.entrywidth, text= self.entry_year, font = self.fontsize, anchor = 'w', bd =1, relief = 'flat')
self.entry_year_entry.pack(side='left', fill = 'both', expand = True)
self.sub_data_frames.append(self.entry_year_frame)
....
self.entry_details_frame = tk.Frame(self.subdataframe)
self.entry_details_entry = tk.Label(self.entry_details_frame, width=self.bigentrywidth*2, text= self.entry_details, font = self.fontsize, anchor = 'w', bd = 1, relief = "flat", cursor = "hand2")
self.entry_details_entry.pack(side='left', fill='x')
self.entry_details_entry.bind("<Button-1>", lambda e:self.popup_showinfo())
self.sub_data_frames.append(self.entry_details_frame)
【问题讨论】: