【问题标题】:Linebreak for buttons按钮的换行符
【发布时间】:2016-07-23 11:12:24
【问题描述】:

这是我的问题:
我有一个labelframe(我也在一个经典标签中测试过),其中包含一些左对齐按钮,用于“-side”选项。

这些按钮是由循环生成的,我想在标签中添加一个“wraplength”,以便我的按钮可以跳一行而不是并排跟随。

循环和按钮代码:

    with open('data.txt', 'r') as data:
    for line in data:
        line = line.rstrip('\n')
        status = CheckStatus(line)
        NewButton = Button(labelframe, state = status, text = line, command = lambda x=line:run(str(x)))
        NewButton.pack(side = LEFT, padx = 5, pady = 5)

包含循环的帧:

labelframe = LabelFrame(Window, width = 400, height = 150)
labelframe.pack()
labelframe.pack_propagate(False) #I Try this to fix the size of the labelframe.

【问题讨论】:

  • 如果你想让它们在一列中,只需使用side='top',它们就会从上到下堆叠。
  • @BryanOakley 我知道,但我希望我的按钮出现在 S 行中。换句话说,当标签达到一定宽度时,就会创建一个新行。
  • 哦,所以你想让它们排成一排,但是当它们碰到边缘时你想让它们换行吗?
  • @BryanOakley 没错!

标签: python button tkinter label


【解决方案1】:

好的,所以,最后,我在循环中添加了一个增量变量和一个if。当变量等于 5 时,将创建一个新框架(包含按钮)。不确定这是否是最优化的方法,但我没有发现其他任何东西......

def LoadButtons():
FrameInfoText.config(justify = CENTER, text = 'Initialization...')
FrameInfoText.update()
LineFrame = Frame(labelframe)
LineFrame.pack()
ButtonsPerLine = 0
with open('data.txt', 'r') as data:
    for line in data:
        line = line.rstrip('\n')
        StreamPerLine += 1
        if ButtonsPerLine > 5:
            LineFrame = Frame(labelframe)
            LineFrame.pack()
            ButtonsPerLine = 1
        status = CheckStatus(line)
        NewButton = Button(LineFrame, state = status, text = line, command = lambda x=line:run(str(x)))
        NewButton.pack(side = LEFT, padx = 5, pady = 5)
        FrameInfoText.config(text = 'Loading...\n'+line)
        FrameInfoText.update()

【讨论】:

    猜你喜欢
    • 2017-08-06
    • 2013-08-31
    • 2013-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-13
    相关资源
    最近更新 更多