赞
踩
我一直在尝试使用Tkinter模块为Python 3.4.2创建一个应用程序
有N个标签。
对于这N个标签中的每一个,我试图创建一行文本框,这些文本框可能/可能不是相同的长度。
每个标签的文本框数量也可能不同。
我需要这个窗口的滚动条。
所以我创建了一个画布并使用Scrollbar小部件来创建水平和垂直滚动条。在这个画布中,我输入了一个框架,以便我可以添加我的标签和文本框。
为了构造不同长度的文本框,我使用了小部件的grid()方法。
我读到网格列的长度足以容纳最大的小部件(这里是文本框),你不能在网格的单元格中添加多个小部件。
我使用了Textbox小部件的columnspan属性,但没有任何帮助。 e1.grid(row = i,column = 1,columnspan = width)
对于第一列
和后续列的e1.grid(row = i,column = width_sum,columnspan = width)。这里width_sum是不同文本框长度的总和,因为它是当前的。为每个Label(存在于不同的行中)重置width_sum参数。
我需要这样的输出:
在此输入图像描述
提前致谢。
要实现您描述的GUI,我认为您最好的选择是:
每行创建1帧。
然后在每个框架中,使用.pack()几何管理器并排打包文本框。
码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33import tkinter as tk
from random import randint
root = tk.Tk()
# Create N frames on top of each other
N = 4
frames = []
for n in range(N):
frame = tk.Frame(root)
frame.pack(side='top', anchor='w')
# Store the current frame reference in"frames"
frames.append(frame)
# Add some widgets in each frame
entryboxes = {frame: [] for frame in frames}
for i, frame in enumerate(frames):
# Add a label
label = tk.Label(frame, text="Label"+str(i+1))
label.pack(side='left')
# Add 5 Entry boxes with random widths
for i in range(5):
random_width = 10 + randint(0,9)
e = tk.Entry(frame, width = random_width)
e.pack(side='left')
# Store the current entrybox reference in"entryboxes"
entryboxes[frame].append(e)
# Add some text in the 4th box of the 3rd frame
entryboxes[frames[2]][3].insert(0, 'hello')
# Launch the app
root.mainloop()
嘿Josselin,谢谢你的回复。 为每行添加一个框架似乎是现在的自然解决方案。
很高兴你喜欢它! 如果它解决了你的问题,你可以接受答案;)stackoverflow.com/help/someone-answers
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。