tkinter Python 创建子窗口

1 投票
1 回答
1314 浏览
提问于 2025-04-17 14:51

你好,我正在尝试用Python的Tkinter创建一个工具,用来浏览时间机器的镜像文件。我打算使用这个链接中的代码作为目录浏览器:http://code.google.com/p/python-ttk/source/browse/trunk/pyttk-samples/dirbrowser.py?r=21。我已经写好了一个开始菜单,当点击“浏览”按钮时,我希望能打开目录浏览器,用户可以选择一个文件,然后这个文件的路径会返回到标签上(我需要添加这个功能,因为目前的目录浏览器代码里还没有)。下面是我开始菜单的代码:

#!/usr/bin/python

from Tkinter import *
import ttk

class App:

    def __init__(self,master):

        frame = Frame(master)
        frame.pack()

        self.label = Label(frame, text="Please enter file path or browse to a file")
        self.label.pack(side=TOP)

        self.button = Button(frame, text="OK", command=messageWindow)
        self.button.pack(side=BOTTOM)

        self.hi_there = Button(frame, text="Browse")
        self.hi_there.pack(side=BOTTOM)

        self.entry = Entry(frame, width = 30)
        self.entry.pack(side=LEFT)

root = Tk()

app = App(root)

root.mainloop()

我听说在Tkinter中不能同时有两个根窗口,但我找不到其他解决办法,因为目录浏览器也有一个根窗口。我不确定我这样做是否正确,但在“浏览”按钮上我添加了:

 self.hi_there = Button(frame, text="Browse", command=dir)

我把目录浏览器的代码放在一个类里面,叫做dir。所以我在想我应该调用整个类吗?但是我得到了一个错误,提示说dir没有定义。我该如何正确处理这个问题呢?

1 个回答

1

我不太明白你说的“时间机器镜像”是什么意思,不过我有一些建议可能对你有帮助:首先,不要用 dir 这个名字来命名变量,因为它是一个内置的关键字,你会遇到麻烦。如果你在找一个叫 dir 的方法,而这个方法在一个类里面,确保你告诉程序去这个类里面找。

    def sayHello():
        print "Hello!"


    class Person:

        def sayHello():
            print "Hello from Person"

    a_person = Person()

    sayHello() 
    ##"Hello"

    a_person.sayHello()
    ## "Hello from Person"

调用 printHelloclass_instance.printHello 是两个不同的函数,你需要把 class_instance.dir 传给按钮。

我相信你对这些应该有所了解,但有一些现成的 文件对话框 可以帮助你获取文件路径、文件名等等。

还有一点,你不需要一个新的 root 实例,你需要的是一个新的 TopLevel 实例,这基本上和新的 root 是一样的,但又有些不同。

撰写回答