文档章节

Python GUI编程(Tkinter)文件对话框

wangxuwei
 wangxuwei
发布于 2016/04/17 23:42
字数 737
阅读 1939
收藏 7

mytktest1.py

import os
import tkinter as tk
from tkinter import ttk
from tkinter import filedialog
from tkinter import messagebox


class 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('<Return>', func=self.__refresh)
        #gcombobox.bind(‘<ComboboxSelected>‘, func=self.__refresh) # 绑定 <ComboboxSelected> 事件
        # -- 放置位置
        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()

效果如下:


© 著作权归作者所有

wangxuwei
粉丝 25
博文 335
码字总数 117394
作品 0
杭州
其他
私信 提问
Python_017 GUI编程

GUI编程(Tkinter) python提供了多个图形开发界面的库,几个常用Python GUI库如下: Tkinter: Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口.Tk和Tkinter可以在大多数的Unix平台下...

g00m
2015/02/21
0
0
你好,Python GUI编程(Tkinter)文件对话框问题请教

@wangxuwei 你好,想跟你请教个问题:你好,网上搜索看你的文章:Python GUI编程(Tkinter)文件对话框。很有用,所以昨天专门注册账号支持你一下,谢谢。今天我原封不动跑了下你的文章的代码,...

我爱大脚丫
2018/11/17
37
0
请教:怎样用Python GUI的按键图标去触发一个Python的程序?

我有一个Linux环境下的已经用Python写好的暂且称之为XXX.py的文件。为了不用每次都在terminal里手动输入 $>python XXX.py,我用Tkinter做了一个非常简单的入门级的GUI: from Tkinter impor...

Fitz999
2015/07/23
2.1K
1
Tkinter-Python的GUI包初体验

Python的GUI包有很多,easyGUI可能更加适合新手,但是Tkinter包作为一个官方自带的包,功能强大,也比较易于上手。本文将对Tkinter的使用有一个初步的讲解。 下面是Python官网关于Tkinter的介...

cometeme
2017/11/18
0
0
转-用python进行GUI开发的选择

From: http://www.91linux.com/html/article/program/python/20080101/9439.html Python最大的特点就在于她的快速开发功能。作为一种 胶水型语言,python几乎可以渗透在我们编程过程中的各个...

玉龙
2012/03/14
0
1

没有更多内容

加载失败,请刷新页面

加载更多

rsync工具常用选项以及同步的两种方式

rsync -av /etc/passwd /tmp/1.txt #rsync的本机传输写法 rsync -av /tmp/1.txt 192.168.188.128:/tmp/2.txt #rsync的远程传输rsync格式rsync [OPTION] … SRC ......

林怡丰
今天
3
0
GatewayWorker 报错:stream_socket_server(): unable to connect to tcp://0.0.0.0:1238

GatewayWorker 报错:stream_socket_server(): unable to connect to tcp://0.0.0.0:1238 (Address already in use) 官方文档虽然有相同的问题,但是对我的问题没起作用…… 后面发现自己手贱...

wenzhizhong
昨天
3
0
REST接口

文章来源 https://zhuanlan.zhihu.com/p/28674721?group_id=886181549958119424 http://www.ruanyifeng.com/blog/2014/05/restful_api.html REST 对请求的约定 REST 用来规范应用如何在 HTTP......

Airship
昨天
6
0
Spring Cloud Config 统一配置中心

Spring Cloud Config 统一配置中心 一、统一配置中心 统一管理配置 通常,我们会使用配置文件来管理应用的配置。如一个 Spring Boot 的应用,可以将配置信息放在 application.yml 文件中,如...

非摩尔根
昨天
6
0
android ------ AAPT2 error: check logs for details解决方法

AAPT 是全称是 Android Asset Packaging Tool,它是构建 App,甚至是构建 Android 系统都必不可少的一个工具。它的作用是将所有资源文件压缩打包到Android APK 当中。我们在 Android SDK 目录...

切切歆语
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部