Не удается получить listbox для отображения для tkinter

#python #tkinter

#python #tkinter

Вопрос:

Итак, что я пытаюсь сделать, это открыть файл при нажатии кнопки и отобразить содержимое в списке. Это то, что у меня есть до сих пор, но я не могу отобразить listbox, не говоря уже о том, чтобы информация была в listbox:

 #!/usr/bin/perl -w

import time
from Tkinter import *
import tkFileDialog

def listbox(listbox):

    def open_file():
            file = tkFileDialog.askopenfilename()
            openFile = open(file)
            for line in openFile:
                 listbox.insert(END, line)

    open_file()


class App:

    def __init__(self, parent):

        frame = Frame(parent.title("Buttons"))
        frame.pack()
        root.pack_propagate(0)

        self.exit = Button(frame, text="QUIT", fg="red", command=frame.quit)
        self.exit.pack(side=LEFT)

        self.open = Button(frame, text="Open...", command=self.call_listbox)
        self.open.pack(side=LEFT)

        frame.listbox = Frame()
        scrollme = Scrollbar(frame.listbox)
        self.listbox = Listbox(frame.listbox, yscrollcommand = scrollme.set)
        scrollme.config(command = self.listbox.yview)
        scrollme.pack(side = RIGHT, fill = Y)
        self.listbox.pack()
        self.listbox.insert(END, "Code:")

    def call_listbox(self):
        listbox(self.listbox)

root = Tk()
app = App(root)
root.mainloop()
  

есть предложения? Спасибо

Комментарии:

1. Есть ли причина, по которой у вас есть #!/usr/bin/perl -w первая строка вашего скрипта? Для меня это похоже на Python.

Ответ №1:

Вы забываете упаковать фрейм, содержащий listbox.

FWIW, ваша перегрузка имени «listbox» делает ваш код очень запутанным — у вас есть def listbox(listbox) , self.listbox и frame.listbox . И у вас также есть call_listbox и Listbox класс, который нужно добавить к путанице.

Комментарии:

1. Я упаковываю сразу после scrollme.pack, и я согласен, что это сбивает с толку, это всего лишь грубое кодирование, и у меня еще не было возможности обозначить вещи так, как я хочу

2. @Blizbiggy: нет, это не так. Нигде в вашем коде вы не делаете что-то вроде frame.listbox.pack() . Прочитайте мой ответ еще раз: вы не упаковываете фрейм , в котором находится listbox.

3. оххххххх хорошо, теперь я это вижу, лол. и после этого это работает 🙂 после некоторого просмотра функции, похоже, сливаются в один O.O я полагаю, что пришло время сделать их помеченными немного лучше. Еще раз спасибо!