矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 736|回复: 11

这个Python的tkinter程序有点不理解

[复制链接]
     
发表于 2025-2-25 11:04:35 | 显示全部楼层 |阅读模式
p350.py
self.master指什么?
main函数里的ex跟root怎么关联在一起的?
  1. from tkinter import *
  2. from tkinter import filedialog

  3. class MenuApp2(Frame):
  4.     def __init__(self):
  5.         super().__init__()
  6.         self.master.title('File dialog')
  7.         self.pack(fill=BOTH,expand=True)

  8.         menubar=Menu(self.master)
  9.         self.master.config(menu=menubar)

  10.         filemenu=Menu(menubar)
  11.         filemenu.add_command(label='Open...',command=self.onOpen)
  12.         menubar.add_cascade(label='File',menu=filemenu)

  13.         self.txt=Text(self)
  14.         self.txt.pack(fill=BOTH,expand=True)

  15.     def onOpen(self):
  16.         ftypes=[('Python files','*.py'),('All files','*')]
  17.         dlg=filedialog.Open(self,filetypes=ftypes)
  18.         f1=dlg.show()

  19.         if f1!='':
  20.             text=self.readFile(f1)
  21.             self.txt.insert(END,text)

  22.     def readFile(self,filename):
  23.         with open(filename,'r',encoding='utf-8') as f:
  24.             text=f.read()
  25.         return text

  26. def main():
  27.     root=Tk()
  28.     ex=MenuApp2()
  29.     root.geometry('300x250+300+300')
  30.     root.mainloop()

  31. if __name__=='__main__':
  32.     main()

复制代码
     
发表于 2025-2-25 11:39:04 | 显示全部楼层
MenuApp2继承自Frame
ex是MenuApp2的实例化
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2025-2-25 11:54:58 | 显示全部楼层
JuncoJet 发表于 2025-2-25 11:39
MenuApp2继承自Frame
ex是MenuApp2的实例化

那Frame跟root窗口什么关系呢?代码中没有体现
回复 支持 反对

使用道具 举报

     
发表于 2025-2-25 12:59:40 | 显示全部楼层
ustone 发表于 2025-2-25 11:54
那Frame跟root窗口什么关系呢?代码中没有体现

他们的关系可能类似glut
glut负责窗口,但渲染代码是opengl
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2025-2-25 13:36:57 | 显示全部楼层
JuncoJet 发表于 2025-2-25 12:59
他们的关系可能类似glut
glut负责窗口,但渲染代码是opengl

搞不懂了  
回复 支持 反对

使用道具 举报

     
发表于 2025-2-25 13:49:12 | 显示全部楼层
微信截图_20250225134726.png
qt也这样的
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2025-2-25 14:01:48 | 显示全部楼层

你用gvim这个编辑器,没办法使用Qt的窗口设计器吧?
回复 支持 反对

使用道具 举报

     
发表于 2025-2-25 14:07:29 | 显示全部楼层
ustone 发表于 2025-2-25 14:01
你用gvim这个编辑器,没办法使用Qt的窗口设计器吧?

Qt环境没装,之前用 QtCreater 写的代码
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2025-2-25 16:33:00 | 显示全部楼层
JuncoJet 发表于 2025-2-25 14:07
Qt环境没装,之前用 QtCreater 写的代码

Qt还是不错的
回复 支持 反对

使用道具 举报

     
发表于 2025-2-25 18:02:54 | 显示全部楼层
应该是第 8 行的 self.pack(...) 把自己放到了 root 上。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2025-2-25 18:41:58 | 显示全部楼层
scoopydoo 发表于 2025-2-25 18:02
应该是第 8 行的 self.pack(...) 把自己放到了 root 上。

没错      
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2025-2-25 18:46:24 | 显示全部楼层
其它网友的答案(来自AI):

1. **自动设置 master**:在 `MenuApp2` 类中,我们没有显式地传递 `master` 参数,所以 Frame 默认会将其父窗口设置为根窗口 `Tk()`,这也是为什么原代码能够正常运行。

2. **super().__init__() 的行为**:调用 `super().__init__()` 时,Frame 会自动查找已经存在的根窗口,并将其作为父窗口。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-29 11:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表