编写了一个自定义框架类,这样我就可以轻松地生成标签,条目等。我可以输入标签的数量,我希望每个表单都有一些条目。通过创建类的不同示例,我不需要每次都写很多标签和条目。但是当我运行代码时,什么也没发生。我没有得到任何错误来引导我。如果我在get_first_entry中放置一个print语句(self)函数,然后它打印入口的值,但我想从类外部访问该值。
import tkinter as tk
class MyFrame(tk.Frame):
def __init__(self, parent, num_labels, num_entries, num_buttons, label_names=None, *args, **kwargs):
super().__init__(parent, *args, **kwargs)
# If label names are provided, use them instead of default labels
if label_names is None:
label_names = [f"Label {i+1}" for i in range(num_labels)]
# Create labels and entries
self.entries = []
for i in range(num_labels):
label = tk.Label(self, text=label_names[i])
label.grid(row=i, column=0)
for i in range(num_entries):
entry = tk.Entry(self)
entry.grid(row=i, column=1)
self.entries.append(entry)
# Create buttons
for i in range(num_buttons):
if i == 0:
button = tk.Button(self, text=f"Get RA", command=self.get_first_entry)
elif i == 1:
button = tk.Button(self, text=f"Get DEC", command=self.get_second_entry)
#else:
#button = tk.Button(self, text=f"Button {i+1}")
button.grid(row=num_labels+i, column=0, columnspan=2, pady=2)
def get_first_entry(self):
value = self.entries[0].get()
return value
def get_second_entry(self):
value = self.entries[1].get()
return value
root = tk.Tk()
label_RADEC = ['RA','DEC']
label_Time = ['LST','local time']
# Create first frame
frame1 = MyFrame(root, num_labels=2, num_entries=2, num_buttons=2, label_names=label_RADEC)
frame1.grid(row=0, column=0, padx=10, pady=10)
# Access the first entry
first_entry_value = frame1.get_first_entry()
print(first_entry_value)
root.mainloop()
更新了所有条目作为数组的方法。现在它在开始时打印空数组,但是如果我在条目中输入其他值,仍然不打印任何东西
'',''
1条答案
按热度按时间vulvrdjw1#
问题不在于
get_entries
不起作用,而在于您使用它的方式不对。当您第一次调用
get_entries
并打印结果时,在用户有机会输入任何内容之前,它会打印一个空字符串列表。当你按下按钮调用
get_entries
时,它会很好地计算值,但是,因为它只返回值,调用者(mainloop
)忽略了它调用的所有函数的返回值,因为它不知道如何处理它们,所以这些值会被丢弃。你可以在
get_entries
中添加一个print
语句,当你这样做的时候,你可以看到它得到的值很好:当我在第一个条目中插入“this is RA”,在第二个条目中插入“this is DEC”时,当我按下按钮时,我得到以下输出:
如果将
return
语句保留在中,则可以使用它从类外部获取值,只是必须在用户输入值之后而不是之前执行此操作。