添加标签时,列表框会调整大小:tkinter

时间:2018-06-30 04:54:31

标签: tkinter tkinter-layout

我正在使用.grid()制作GUI,因为它有很多按钮。我已将其放在屏幕顶部(Frame)的交互式frameone中,底部有frametwo,我想根据用户的按钮打印出消息印刷机。就上下文而言,这是一款战舰游戏。但是当我制作frametwo并在其中放入listbox时,将调整列表框的大小以适合其中的文本。我不想每次输入更多label时都需要调整窗口的大小。这是一个工作示例:

from tkinter import *
import tkinter as tk
window = Tk()
window.title("Window")
window.geometry('150x350')     #I wanted the demonstration to work for you.

def addline():                 #Adding sample text
    Label(listbox, text='this is text').grid(sticky=N+W)

frameone = Frame(window, height=10, width=10)
frameone.grid(sticky=N)        #The top where the button goes...

Label(frameone, bg='yellow', text='This is frameone\n\n\n').grid(row=0, column=0)
                               #The yellow here is where all the buttons go...
addtext = Button(frameone, text = 'Add line:', command=addline)
addtext.grid(column=0,row=1)   #Button to add text...

frametwo = Frame(window, bg='red', height=10, width=10)
frametwo.grid(sticky=W)        

listbox = Listbox(frametwo)
listbox.grid(sticky=W, pady=3, padx=3)         #This is the listbox that is wrongly resizing.

scrolltwo = Scrollbar(window, orient=HORIZONTAL)
scrolltwo.configure(command=listbox.yview)
scrolltwo.grid(sticky=S+E)     #I got lazy, I will put this on the side w/rowspan etc.

window.mainloop()

如果这是一个重复的问题或某种程度上非常明显,我深表歉意。另外,对不起,我的GUI令人毛骨悚然...我不明白为什么这种方法不起作用。在寻找解决方案时,我发现的是对.grid的一些很好的解释,以及如何在不调整列表大小的情况下对其进行调整。一切都有帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

实际上,Listboxlistbox的工作方式与Frame相似。要将项目添加到Listbox,请使用其insert函数。因此,要解决您的问题,请替换:

Label(listbox, text='this is text').grid(sticky=N+W)

使用:

listbox.insert(END, 'this is text')

有关tkinter Listbox小部件的更多信息,请参阅effbot文档here