我一直在尝试为Python3.4.2创建一个使用Tkinter模块的应用程序,有N个标签。对于这N个标签,我正在尝试创建一行可能/可能不具有相同长度的的Textboxes。每个标签的Textboxes数量也可能不同。这个窗口我需要一个滚动条。因此,我创建了一个画布,并使用滚动条小部件创建水平和垂直滚动条。在这个画布中,我输入了一个框架,这样我就可以添加标签和Textboxes。为了构造不同长度的Textboxes,我为小部件使用了grid()方法。我看到网格列的长度足以容纳最大的小部件(这里是一个Textbox),您不能在网格的一个单元格中添加多个小部件。
我使用了Textbox小部件的columnspan属性,但是没有帮助。e1.grid(row=i、column=1、columnspan=width)表示第一列,e1.grid(row=i、column=width_sum、columnspan=width)表示后续列。这里,width_sum是不同文本框的长度之和,因为现在有一个文本框。对每个标签(出现在不同行中)重置width_sum参数。
我需要这样的输出:
提前谢谢。
发布于 2017-05-09 06:55:09
要实现您描述的GUI,我认为您最好的选择是:
.pack()
几何管理器将文本框并排打包。
码
import 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()
https://stackoverflow.com/questions/43843624
复制