你好我是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的意思,我实际上无法在线查找文档。
答案 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函数设置小部件更安全。
在此期间查看这些内容:
答案 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的几何 - root
或grids
(这里有更多信息:https://stackoverflow.com/a/26225122/3646530)这样做,因为pack
实际上没有任何图形,你的交互只是键绑定,你不必担心这个。
当您按,ex
时,您希望窗口退出。 Frame小部件可能会退出,但您还需要根小部件来销毁自身。所以这样的事情可行。
q
有关tkinter小部件和功能的详细信息,请尝试此处:http://effbot.org/tkinterbook/