【问题标题】:Python - GUI - Tkinter listboxesPython - GUI - Tkinter 列表框
【发布时间】:2012-05-16 12:55:23
【问题描述】:

我无法将我的一个文本文件加载到我的 GUI 中。我有一个加载功能(在菜单栏上),并创建了一个列表框。

加载菜单和列表框的代码:

class View(Listbox):
    def __init__(self, master):
        Listbox.__init__(self, master)      #makes view class listbox


class Controller(object):
    def __init__(self, master):
        """ Main interface:
        master - the top level window

        """
        self._master = master
        menubar = Menu(self._master)

        frame1 = Frame(self._master)
        frame1.pack(side=TOP, fill=BOTH, padx=5,expand=True)

        self._Listbox=View(frame1)
        self._Listbox.pack(side = TOP,fill=BOTH, expand = True,pady=20)

        menubar = Menu(self._master)
        filemenu = Menu(menubar, tearoff=0)
        filemenu.add_command(label="Open rooms file", command = self.file_open)


    def file_open(self):
        filename = tkFileDialog.askopenfilename() 

加载文件有效,但当前加载的文本文档在哪里?如何在我的列表框中显示它?

【问题讨论】:

  • 抱歉,我没有正确输入。它应该是显示的。由于我正在将文本文件加载到 GUI 中,因此我希望将文本文件显示到 lixtbox 上。

标签: python file listbox tkinter


【解决方案1】:

这行得通:

from Tkinter import *
import tkFileDialog

class View(Listbox):
    def __init__(self, master):
        Listbox.__init__(self, master)      #makes view class listbox


class Controller(object):
    def __init__(self, master):
        """ Main interface:
        master - the top level window
        """
        self._master = master

        frame1 = Frame(self._master)
        frame1.pack(side=TOP, fill=BOTH, padx=5,expand=True)

        self._Listbox=View(frame1)
        self._Listbox.pack(side = TOP,fill=BOTH, expand = True,pady=20)

        menubar = Menu(self._master)
        filemenu = Menu(menubar, tearoff=0)
        filemenu.add_command(label="Open", command = self.file_open)
        menubar.add_cascade(label='File',menu=filemenu)
        self._master.config(menu=menubar)

    def file_open(self):
        filename = tkFileDialog.askopenfilename()

        #insert each line in the file into the listbox
        with open(filename,'r') as f:
            for line in f:
                self._Listbox.insert(END,line)



if __name__ == "__main__":
    root=Tk()
    c=Controller(root)
    root.mainloop()

这与您的代码仅略有不同...首先,我删除了第一个menubar = Menu(self._master),因为它并没有真正做任何事情。其次,我添加了一个“级联”menubar.add_cascade(label='File',menu=filemenu),第三,我实际上将菜单附加到了根Tk窗口:self._master.config(menu=menubar)

【讨论】:

  • ?抱歉,我没有发布我的导入或完整代码。但是,是的,这就是它的样子。你能做到这样当你加载一个文本文件时,它会显示在列表框中吗?
  • 我不完全明白你想要什么......列表框已显示,里面什么都没有。文本文件中有什么?文本文件的每一行都应该是列表框中的新条目吗?此外,这与您的代码并不完全相同——我将进行编辑以指出差异。
  • @AnthonyDo :我已经编辑指出我的代码和你的代码之间的差异——我还添加了一个简单的循环来将文件中的每一行打包到列表框中的不同行中。
  • 这是我想要的,当我从 GUI 加载文本文档时。图像会好很多。 imageshack.us/photo/my-images/831/97707494.png
  • 谢谢你:)。我将尝试使用 file_open 函数,看看是否可以获得我想要的格式。感谢您花时间帮助我,谢谢。
猜你喜欢
  • 1970-01-01
  • 2021-02-12
  • 2017-12-11
  • 1970-01-01
  • 2021-09-18
  • 2020-09-10
  • 1970-01-01
  • 2013-01-07
  • 2012-12-30
相关资源
最近更新 更多