Tkinter gui mainloop" ex ="

时间:2015-04-23 03:25:08

标签: python user-interface tkinter

你好我是python中的一个完整的初学者,在tkinter中创建一个简单的gui时遇到了问题(试图制作简单的Pong)。无论如何我在python 3中有这个代码:

    from tkinter import Frame
import tkinter

class Pong(Frame):

    def __init__(self, parent):
        Frame.__init__(self, parent)   
        self.parent = parent
        self.parent.bind("<Key>", self.key)
        self.initialize()

    def key(self, event):
        if event.char == 'q':  #end
            self.quit()
        print("end")
    def initialize(self):
        print("initialize")
        pass

def main():

    root = tkinter.Tk()
    ex = Pong(root)
    root.overrideredirect(True)
    root.geometry("{0}x{1}+0+0".format(root.winfo_screenwidth(), root.winfo_screenheight()))
    root.mainloop()

main()

我想知道底部具体是什么&#34; ex = Pong(root)&#34;部分是因为如果我删除该程序不起作用,我不能按Q退出,但我无法找到ex的意思,我实际上无法在线查找文档。

2 个答案:

答案 0 :(得分:1)

Pong 类是一个包装框架。它代表GUI应用程序,并封装(隐藏)Tkinter GUI的东西。

框架是显示内容的“窗口”。 root Tk 主框架。 root 是基本窗口 - 销毁root会破坏(关闭)GUI。

考虑到这一点,我建议您尝试以下更改:

class Pong(Frame):

...

    def key(self, event):
        if event.char == 'q':  #end
            # close the base Frame, and our application Frame
            self.parent.quit()
            self.quit()

    # wrapper methods for root control
    def overrideredirect( bool ):
        self.parent.overrideredirect(bool)

    def geometry(geo_string):
        self.parent.geometry(geo_string)

    def mainloop():
        self.parent.mainloop()

...

def main():

    root = Tkinter.Tk()
    wdth, hght = root.winfo_screenwidth(), root.winfo_screenheight()
    ex = Pong(root)
    ex.overrideredirect(True)
    ex.geometry("{0}x{1}+0+0".format(wdth, hght))
    ex.mainloop()

然后,您可以使用Pong驱动主窗口。我之前使用过这种方法,发现它更安全 - 我没有把root与我的Frame类混淆并且发生了令人讨厌的事故!它也比继承Tk更安全。

您还可以为pong, generate_gui()添加方法,并对其进行编码以设置GUI小部件。这比直接从main函数设置小部件更安全。

在此期间查看这些内容:

http://effbot.org/tkinterbook/

http://www.tkdocs.com/tutorial/

答案 1 :(得分:0)

root = tkinter.Tk()

这会创建一个Tk的顶级窗口小部件,它通常是应用程序的主窗口。

ex = Pong(root)

Pong是一个创建类型为ex的窗口小部件(Frame)的类,它具有您在Pong类中定义的某些特征。所有小部件都需要一个可以绑定的父小部件。在这里,您要创建一个绑定到ex的{​​{1}}类型的子窗口小部件Pong

root

在这里,您要告诉父窗口小部件应该是什么尺寸以及它的来源应该在哪里。 (全屏和0,0)。请注意,您尚未提及您的子窗口小部件root.overrideredirect(True) root.geometry("{0}x{1}+0+0".format(root.winfo_screenwidth(), root.winfo_screenheight())) root.mainloop() 需要在ex内的大小和位置。你可以使用tkinter的几何 - rootgrids(这里有更多信息:https://stackoverflow.com/a/26225122/3646530)这样做,因为pack实际上没有任何图形,你的交互只是键绑定,你不必担心这个。

当您按,ex时,您希望窗口退出。 Frame小部件可能会退出,但您还需要根小部件来销毁自身。所以这样的事情可行。

q

有关tkinter小部件和功能的详细信息,请尝试此处:http://effbot.org/tkinterbook/