Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Tkinter中为不同行中的多个标签创建不同长度的文本框小部件_Python_Tkinter_Textbox - Fatal编程技术网

Python 在Tkinter中为不同行中的多个标签创建不同长度的文本框小部件

Python 在Tkinter中为不同行中的多个标签创建不同长度的文本框小部件,python,tkinter,textbox,Python,Tkinter,Textbox,我一直在尝试使用Python3.4.2的Tkinter模块创建一个应用程序 有N个标签。 对于这N个标签中的每一个,我试图创建一行文本框,这些文本框的长度可能相同,也可能不同。 每个标签的文本框数量也可能不同。 我需要这个窗口的滚动条。 所以我创建了一个画布,并使用Scrollbar小部件创建了水平和垂直滚动条。在这个画布中,我输入了一个框架,以便添加标签和文本框。 为了构造不同长度的文本框,我对小部件使用了网格方法。 我了解到网格列的长度足以容纳最大的widget。这里是一个文本框,不能在网格

我一直在尝试使用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是由于当前文本框而导致的不同文本框的长度之和。对于存在于不同行中的每个标签,将重置宽度总和参数

我需要这样的输出:


提前谢谢

要实现您描述的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()