博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
tkinter的GUI设计:界面与逻辑分离(二)-- 菜单栏
阅读量:6719 次
发布时间:2019-06-25

本文共 5779 字,大约阅读时间需要 19 分钟。

由于要用到文件对话框和消息对话框,所以先给出下面的列表。

py2 与 py3 中 tkinter 的变化:   Tkinter         → tkinter    tkMessageBox    → tkinter.messagebox    tkColorChooser  → tkinter.colorchooser    tkFileDialog    → tkinter.filedialog    tkCommonDialog  → tkinter.commondialog    tkSimpleDialog  → tkinter.simpledialog    tkFont          → tkinter.font    Tkdnd           → tkinter.dnd    ScrolledText    → tkinter.scrolledtext    Tix             → tkinter.tix    ttk             → tkinter.ttk 说明:本文基于:win7 + python34 知识点: 1、文件夹对话框 tkinter.filedialog 2、消息框 tkinter.messagebox 3、菜单栏 4、下拉列表 Combobox 的设置 效果图: 代码:
import osimport tkinter as tkfrom tkinter import ttkfrom tkinter import filedialogfrom tkinter import messageboxclass Application(tk.Tk):    '''    文件夹选择程序        界面与逻辑分离    '''        def __init__(self):        '''初始化'''        super().__init__() # 有点相当于tk.Tk()                self.createWidgets()    def createWidgets(self):        '''界面'''        self.title('文件夹选择程序')        self.columnconfigure(0, minsize=50)                # 定义一些变量        self.entryvar = tk.StringVar()        self.keyvar = tk.StringVar()        self.keyvar.set('关键字')        items = ['BufferPool','Close','Data Capture','Compress','Pqty','Sqty']        # 先定义顶部和内容两个Frame,用来放置下面的部件        topframe = tk.Frame(self, height=80)        contentframe = tk.Frame(self)        topframe.pack(side=tk.TOP)        contentframe.pack(side=tk.TOP)                # 顶部区域(四个部件)        # -- 前三个直接用 tk 的 widgets,第四个下拉列表 tk 没有,ttk 才有,比较麻烦        glabel = tk.Label(topframe, text='当前文件夹:')        gentry = tk.Entry(topframe, textvariable=self.entryvar)        gbutton = tk.Button(topframe, command=self.__opendir, text='选择')        gcombobox = ttk.Combobox(topframe, values=items, textvariable=self.keyvar)        # -- 绑定事件        gentry.bind('
', func=self.__refresh) #gcombobox.bind('
', func=self.__refresh) # 绑定
事件 # -- 放置位置 glabel.grid(row=0, column=0, sticky=tk.W) gentry.grid(row=0, column=1) gbutton.grid(row=0, column=2) gcombobox.grid(row=0, column=3) # 内容区域(三个部件) # -- 前两个滚动条一个竖直一个水平 rightbar = tk.Scrollbar(contentframe, orient=tk.VERTICAL) bottombar = tk.Scrollbar(contentframe, orient=tk.HORIZONTAL) self.textbox = tk.Text(contentframe, yscrollcommand=rightbar.set, xscrollcommand=bottombar.set) # -- 放置位置 rightbar.pack(side =tk.RIGHT, fill=tk.Y) bottombar.pack(side=tk.BOTTOM, fill=tk.X) self.textbox.pack(side=tk.LEFT, fill=tk.BOTH) # -- 设置命令 rightbar.config(command=self.textbox.yview) bottombar.config(command=self.textbox.xview) def __opendir(self): '''打开文件夹的逻辑''' self.textbox.delete('1.0', tk.END) # 先删除所有 self.dirname = filedialog.askdirectory() # 打开文件夹对话框 self.entryvar.set(self.dirname) # 设置变量entryvar,等同于设置部件Entry if not self.dirname: messagebox.showwarning('警告', message='未选择文件夹!') # 弹出消息提示框 self.dirlist = os.listdir(self.entryvar.get()) for eachdir in self.dirlist: self.textbox.insert(tk.END, eachdir+'\r\n') self.textbox.update() def __refresh(self, event=None): '''更新的逻辑''' self.textbox.delete('1.0', tk.END) # 先删除所有 self.dirlist = os.listdir(self.entryvar.get()) for eachdir in self.dirlist: self.textbox.insert(tk.END, eachdir+'\r\n') self.textbox.update() def addmenu(self, Menu): '''添加菜单''' Menu(self) class MyMenu(): '''菜单类''' def __init__(self, root): '''初始化菜单''' self.menubar = tk.Menu(root) # 创建菜单栏 # 创建“文件”下拉菜单 filemenu = tk.Menu(self.menubar, tearoff=0) filemenu.add_command(label="打开", command=self.file_open) filemenu.add_command(label="新建", command=self.file_new) filemenu.add_command(label="保存", command=self.file_save) filemenu.add_separator() filemenu.add_command(label="退出", command=root.quit) # 创建“编辑”下拉菜单 editmenu = tk.Menu(self.menubar, tearoff=0) editmenu.add_command(label="剪切", command=self.edit_cut) editmenu.add_command(label="复制", command=self.edit_copy) editmenu.add_command(label="粘贴", command=self.edit_paste) # 创建“帮助”下拉菜单 helpmenu = tk.Menu(self.menubar, tearoff=0) helpmenu.add_command(label="关于", command=self.help_about) # 将前面三个菜单加到菜单栏 self.menubar.add_cascade(label="文件", menu=filemenu) self.menubar.add_cascade(label="编辑", menu=editmenu) self.menubar.add_cascade(label="帮助", menu=helpmenu) # 最后再将菜单栏整个加到窗口 root root.config(menu=self.menubar) def file_open(self): messagebox.showinfo('打开', '文件-打开!') # 消息提示框 pass def file_new(self): messagebox.showinfo('新建', '文件-新建!') # 消息提示框 pass def file_save(self): messagebox.showinfo('保存', '文件-保存!') # 消息提示框 pass def edit_cut(self): messagebox.showinfo('剪切', '编辑-剪切!') # 消息提示框 pass def edit_copy(self): messagebox.showinfo('复制', '编辑-复制!') # 消息提示框 pass def edit_paste(self): messagebox.showinfo('粘贴', '编辑-粘贴!') # 消息提示框 pass def help_about(self): messagebox.showinfo('关于', '作者:kinfinger \n verion 1.0 \n 感谢您的使用! \n kinfinge@gmail.com ') # 弹出消息提示框 if __name__ == '__main__': # 实例化Application app = Application() # 添加菜单: app.addmenu(MyMenu) # 主消息循环: app.mainloop()

 

本文转自罗兵博客园博客,原文链接:http://www.cnblogs.com/hhh5460/p/5170459.html
,如需转载请自行联系原作者
你可能感兴趣的文章
android error: Apostrophe not preceded by \
查看>>
小程序-scroll-view下拉事件请求多次接口
查看>>
AngularJs 指令
查看>>
云适配正则笔记
查看>>
开始学习silverlight
查看>>
php使用递归计算目录大小
查看>>
EF 直接修改数据,不再查询数据库
查看>>
script标签加载js代码的一些知识
查看>>
The builder launch configuration could not be found
查看>>
linux 安装软件的地方
查看>>
bond网卡绑定(centos6.5 + centos 7)
查看>>
Leetcode-Letter Combinations of a Phone Number
查看>>
压测 linux + jexus + mono + asp.net mvc
查看>>
成功交付离岸项目
查看>>
[转]ArcGIS 10.1创建切片缓存方法工具总结
查看>>
垃圾回收与内存泄漏
查看>>
旧博客欢迎莅临
查看>>
深度学习原理与框架-卷积网络细节-迁移学习 1.冻结层数,只进行部分层的训练...
查看>>
C# 中的invoke和begininvoke
查看>>
通用类 IPScanner 利用纯真IP数据库(QQWry.dat)查询IP所在地
查看>>