这个Python的tkinter程序有点不理解
p350.pyself.master指什么?
main函数里的ex跟root怎么关联在一起的?
from tkinter import *
from tkinter import filedialog
class MenuApp2(Frame):
def __init__(self):
super().__init__()
self.master.title('File dialog')
self.pack(fill=BOTH,expand=True)
menubar=Menu(self.master)
self.master.config(menu=menubar)
filemenu=Menu(menubar)
filemenu.add_command(label='Open...',command=self.onOpen)
menubar.add_cascade(label='File',menu=filemenu)
self.txt=Text(self)
self.txt.pack(fill=BOTH,expand=True)
def onOpen(self):
ftypes=[('Python files','*.py'),('All files','*')]
dlg=filedialog.Open(self,filetypes=ftypes)
f1=dlg.show()
if f1!='':
text=self.readFile(f1)
self.txt.insert(END,text)
def readFile(self,filename):
with open(filename,'r',encoding='utf-8') as f:
text=f.read()
return text
def main():
root=Tk()
ex=MenuApp2()
root.geometry('300x250+300+300')
root.mainloop()
if __name__=='__main__':
main()
MenuApp2继承自Frame
ex是MenuApp2的实例化 JuncoJet 发表于 2025-2-25 11:39
MenuApp2继承自Frame
ex是MenuApp2的实例化
那Frame跟root窗口什么关系呢?代码中没有体现 ustone 发表于 2025-2-25 11:54
那Frame跟root窗口什么关系呢?代码中没有体现
他们的关系可能类似glut
glut负责窗口,但渲染代码是opengl;P JuncoJet 发表于 2025-2-25 12:59
他们的关系可能类似glut
glut负责窗口,但渲染代码是opengl
搞不懂了
qt也这样的
JuncoJet 发表于 2025-2-25 13:49
qt也这样的
你用gvim这个编辑器,没办法使用Qt的窗口设计器吧? ustone 发表于 2025-2-25 14:01
你用gvim这个编辑器,没办法使用Qt的窗口设计器吧?
Qt环境没装,之前用 QtCreater 写的代码 JuncoJet 发表于 2025-2-25 14:07
Qt环境没装,之前用 QtCreater 写的代码
Qt还是不错的 应该是第 8 行的 self.pack(...) 把自己放到了 root 上。 scoopydoo 发表于 2025-2-25 18:02
应该是第 8 行的 self.pack(...) 把自己放到了 root 上。
没错 其它网友的答案(来自AI):
1. **自动设置 master**:在 `MenuApp2` 类中,我们没有显式地传递 `master` 参数,所以 Frame 默认会将其父窗口设置为根窗口 `Tk()`,这也是为什么原代码能够正常运行。
2. **super().__init__() 的行为**:调用 `super().__init__()` 时,Frame 会自动查找已经存在的根窗口,并将其作为父窗口。
页:
[1]