Python 在Tkinter中为不同行中的多个标签创建不同长度的文本框小部件
我一直在尝试使用Python3.4.2的Tkinter模块创建一个应用程序 有N个标签。 对于这N个标签中的每一个,我试图创建一行文本框,这些文本框的长度可能相同,也可能不同。 每个标签的文本框数量也可能不同。 我需要这个窗口的滚动条。 所以我创建了一个画布,并使用Scrollbar小部件创建了水平和垂直滚动条。在这个画布中,我输入了一个框架,以便添加标签和文本框。 为了构造不同长度的文本框,我对小部件使用了网格方法。 我了解到网格列的长度足以容纳最大的widget。这里是一个文本框,不能在网格的一个单元格中添加多个小部件 我使用了Textbox小部件的columnspan属性,但没有任何帮助。e1.gridrow=i,column=1,columnspan=width 第一栏 以及e1.gridrow=i,column=width\u sum,columnspan=后续列的宽度。这里width_sum是由于当前文本框而导致的不同文本框的长度之和。对于存在于不同行中的每个标签,将重置宽度总和参数 我需要这样的输出:Python 在Tkinter中为不同行中的多个标签创建不同长度的文本框小部件,python,tkinter,textbox,Python,Tkinter,Textbox,我一直在尝试使用Python3.4.2的Tkinter模块创建一个应用程序 有N个标签。 对于这N个标签中的每一个,我试图创建一行文本框,这些文本框的长度可能相同,也可能不同。 每个标签的文本框数量也可能不同。 我需要这个窗口的滚动条。 所以我创建了一个画布,并使用Scrollbar小部件创建了水平和垂直滚动条。在这个画布中,我输入了一个框架,以便添加标签和文本框。 为了构造不同长度的文本框,我对小部件使用了网格方法。 我了解到网格列的长度足以容纳最大的widget。这里是一个文本框,不能在网格
提前谢谢 要实现您描述的GUI,我认为您最好的选择是: 每行创建1帧。 然后在每个帧中,使用.pack geometry管理器并排打包文本框。 代码:
嘿,乔瑟林,谢谢你的回复。现在为每行添加一个框架似乎是自然的解决方案。很高兴你喜欢它!如果答案解决了你的问题,你可以接受;
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()