Размер списка изменяется при добавлении метки: tkinter - PullRequest
0 голосов
/ 30 июня 2018

Я делаю графический интерфейс, используя .grid(), потому что он имеет много кнопок. Я поместил их в интерактивном Frame в верхней части экрана (frameone), и у меня есть frametwo в нижней части, где я хочу распечатать сообщения в зависимости от того, какие кнопки нажимает пользователь. Это игра на линкоре, для контекста. но когда я делаю frametwo и помещаю в него listbox, размер списка изменяется, чтобы вместить текст внутри. Я не хочу менять размер окна каждый раз, когда вводится больше label s. Вот рабочий пример:

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()

Если это повторный вопрос или как-то супер очевидно, прошу прощения. Кроме того, извините, мой графический интерфейс отвратителен ... Я не понимаю, почему этот метод не работает. При поиске решений я нашел только несколько очень хороших объяснений .grid и как изменить размеры списков, когда их нет. Все помогает, спасибо.

1 Ответ

0 голосов
/ 03 июля 2018

Вы трактуете Listbox, listbox, как Frame, когда на самом деле это работает по-другому. Чтобы добавить элементы в Listbox, используйте функцию insert. Итак, чтобы исправить вашу проблему, замените:

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

С:

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

Подробнее о виджете tkinter Listbox см. В документации по effbot, здесь .

...