我在tkinter中有一些非常大的表格,我不确定我应该以哪种方式实现所有按钮和文本框。或者,如果我不应该完全使用python / find一种新方法来做的话...最终的结果是,它已连接到sqlite3数据库,并将条目存储在那里,供我稍后导出。
首先,我制作了每个单独的输入框并将其放置在所需的位置,最终变成了426行代码,并一遍又一遍地看起来像这样……比起直接执行,它要直接得多第二个选择。
tk.Label(window,text="Lead Operator: ").grid(row=1,column=0)
Operator2 = tk.StringVar()
operator2_entry = tk.Entry(window,textvariable=Operator2)
operator2_entry.grid(row=1,column=1)
我尝试过的第二个选项是一个包含所有50个输入的列表,并循环遍历列表的不同部分以将它们放置在我想要它们去的位置,看起来像这样。我觉得第二个选项很复杂,但是它做了几个输入一次。
for item in list(labels)[10:18:4]:
tk.Label(master,text=item).grid(row=list(labels.keys()).index(item)+2,column=0)
for item in list(variable)[10:18:4]:
item = tk.StringVar()
for item in list(entries)[10:18:4]:
tk.Entry(master,textvariable=list(variable.keys()).index(item[:-6])).grid(row=list(entries.keys()).index(item)+2,column=1)
我无法告诉您哪种效率更高,但是最终程序已经超过30MB,并且在没有我需要的最大形式之一的情况下至少需要2-3秒才能启动,所以我不确定是否要执行第二种方法有助于减少这种情况。 我应该放弃python并寻求其他语言的东西吗?我还没有那么擅长编程,所以我什至不知道通常会以这种形式编码这种形式。
答案 0 :(得分:1)
我想说,最简单的解决方案是创建一个带有标签,行和列的函数,并为该行和列创建标签和条目。
接下来,创建一个数据结构来表示表单的布局。您可以嵌入行和列,也可以假设数据结构的第1行位于第1行,依此类推。您可以在代码中使用格式设置,以便于可视化表单。
这是一个非常简单的示例,假定所有输入字段的大小均相同。您不必这样做,但是可以说明该技术:
import tkinter as tk
def create_entry(parent, label, row, column):
label = tk.Label(parent, text=label, justify="right")
entry = tk.Entry(parent)
label.grid(row=row, column=column, sticky="e")
entry.grid(row=row, column=column+1)
return entry
layout = (
("First Name", 0, 0), ("Address Line 1", 0, 2),
("Last Name", 1, 0), ("Address Line 2", 1, 2),
("City", 2, 2),
("State", 3, 2),
("Zip", 4, 2),
)
root = tk.Tk()
form = tk.Frame(root, bd=2, relief="groove")
form.pack(fill="both", expand=True, padx=20, pady=20)
form.grid_rowconfigure((0,2), weight=1)
entries = {}
for (label, row, column) in layout:
entry = create_entry(form, label, row, column)
entries[label] = entry
root.mainloop()
上面的代码产生的表单看起来像这样:
此示例不使用StringVar
,因为这只是添加了一个需要管理的额外对象,并且在大多数情况下,您根本不需要它。该示例将每个条目存储在字典中,键为标签。因此,例如,要获取“城市”字段的当前值,可以使用entries['City'].get()