Python基础学习之奇异的GUI对话框


Posted in Python onMay 27, 2021

一、漂亮的标签图和按钮图

这个标签的设置config,如果熟悉office的操作,应该是一件不太难的事情。仿照文本的字体,颜色,字号,还有标签的高度宽度等等,做一个标签的仿本py文件如下:
文件在我的pywenjianjia之下。

from tkinter import *
root = Tk()
labelfont = ('times', 28, 'bold')
widget = Label(root, text='Hello tkinter world, I came here!')
widget.config(bg='black', fg='yellow')
widget.config(font=labelfont)
widget.config(height=5, width=40)
widget.pack(expand=YES, fill=BOTH)
root.mainloop()

在atom的packages中点python runner执行这个文件,于是就出现

Python基础学习之奇异的GUI对话框

如果你想做个还有点动态的按钮图片,可以使用button.py文件,也是来一个仿制的py文件。

在from tkinter import *
widget = Button(text='BUTTON', padx=20, pady=20)
widget.pack(padx=30, pady=30)
widget.config(cursor='gumby')
widget.config(bd=8, relief=RAISED)
widget.config(bg='dark green', fg='white')
widget.config(font=('helvetica', 24, 'underline italic'))
mainloop()

在atom的packages中点python runner执行这个文件,于是就出现:
一个漂亮的、彩色的、而且可按动的按钮图片。

Python基础学习之奇异的GUI对话框

二、窗口协议与窗口顶层

早年写那本《创新思维》教材时,学习visio画图花了点功夫,那时佩服visio软件在平面上的分层功夫。也就一个只给你平面感的屏幕,却可以画出很多奇奇怪怪的东西,还可以一层一层地叠放,并配置以不同的色彩。编程学到这里,过去那种怪怪的感觉因为这么多年计算机技术的不断升级,好多让你奇异的东西,早被更多超越给冲淡了。但你还是要为接触GUI的图片来一点惊喜感,而且还让你知道,这个魔幻平面的屏幕,还有相应的协议在发挥作用。我原以为,这个协议称为协议,一定有个协议各方的约定,是个超越GUI之外的东西呢,原来也是一个py代码的GUI文件。
而且,这个文件还有一个怪异,按照教材中的安排,你想去执行它,文件就显示有误。但试探着种种办法好像依然有误。回看教材文本,在窗口图标那一节似乎有个暗示,干脆去掉那个iconbitmap代码行,也就是去掉那个18行代码,文件就可以执行了。

展示文件的注释有点协议文本的味道,这大概就是协议的主要内容吧。我先给出总共28行的代码文件。

"""
弹出三个窗口,destroy()会停止一个窗口,quit()则停止所有窗口.
顶层窗口有标题、图标、协议等等,总是会有一个应用程序窗口。顶
层窗口都是容器,但不会封装/网格化。toplevel就像frame,它是新
窗口且包含一个菜单。
"""
from tkinter import *
root = Tk()    #显示根窗口

trees = [('The tkinter 之旅!',        'light blue'),
        ('The Paint!',          'light green'),
        ('The Giant wetearth !', 'red')]

for(tree, color) in trees:
    win = Toplevel(root)                              #新建窗口
    win.title('Sing...')                              #设置边框
    win.protocol('WM_DELETE_WINDOW', lambda:None)     #忽略关闭
    win.iconbitmap('py-blue-trans-out.ico')           #非红色Tk,有这一行则不运行

    msg = Button(win, text=tree, command=win.destroy) #关闭一个win
    msg.pack(expand=YES, fill=BOTH)
    msg.config(padx=10, pady=10, bd=10, relief=RAISED)
    msg.config(bg='black', fg=color, font=('times', 30, 'bold italic'))

root.title('Lumberjack demo')
Label(root, text='Main window', width=30).pack()
Button(root, text='Quit All', command=root.quit).pack() #终止所有程序
root.mainloop()

执行这个文件,出现以下结果:

Traceback (most recent call last):
  File "C:\Users\zzx21\GUI\Tour\toplevel2.py", line 18, in <module>
    win.iconbitmap('py-blue-trans-out.ico')           #非红色Tk,有这一行则不运行
  File "C:\Users\zzx21\pywenjianjia\lib\tkinter\__init__.py", line 2080, in wm_iconbitmap
    return self.tk.call('wm', 'iconbitmap', self._w, bitmap)
_tkinter.TclError: bitmap "py-blue-trans-out.ico" not defined

C:\Users\zzx21\GUI\Tour>

现在去掉行18,三个窗口按钮全出现了,还外带一个quit图标。使用shell的移动提示符,这些文件可以移动到屏幕上你想放置的地方,有点意思。

Python基础学习之奇异的GUI对话框

三、标准对话框是模态对话框

计算机语言也常常使用逻辑学的一些术语,tkinter之旅中讲到的对话框,竟然有模态对话框和非模态对话框之说。这好像在拉近py语言和逻辑之间的距离,让人有一点缘分之感。你只要对现代逻辑历史稍有理解就知道,20世纪初成熟的现代逻辑,到了20年代,出现了和经典逻辑有点变异的逻辑,那就是非经典的模态逻辑,美国学者C.I.刘易斯构造了严格蕴涵系统的S1-S5,现在所说的模态逻辑就产生了,学名就叫modal logic。而对话框中提到的模态对话框与非模态对话框中的模态一词的英文,就是这个modal。但深入一点,好像这里的模态modal和逻辑的modal并没有什么关联,只是在用词上的一个巧合吧。
沿着教材的思路,先把标准对话框做个基本了解,大概能说明这种巧合。
标准对话框也称通用对话框,这样的对话框也是模态的。这里modal的意思是:这样的对话框会阻止其它界面,这些界面只有在用户关闭该对话框的时候才可能返回。所以,所谓标准对话框或者模态对话框,只要它在屏幕上出现,就把其它的窗口界面给强制挡住了。为什么这就是modal的,按我对于modal的理解,好像一点modal的含义都没有。因为逻辑中的模态总是指的互为定义的模态词,例如必然与可能,应该与禁止等等,好像没有这里的行为意义。且让我们用实例的模态对话框,来表明它的含义吧。虽然modal在这里的含义有点模糊,但实例的出现会消解我们对它的迷惑。很可能python中的模态和逻辑的模态就不是一回事,一种语词使用的巧合罢了。
标准对话框dIg1.pyw,

from tkinter import *
from tkinter.messagebox import *

def callback():
    if askyesno('Verify', 'Do you really want to quit?'):
        showwarning('Yes', 'Quit not yet implemented')
    else:
        showinfo('No', 'Quit has been cancellled')

errmsg = 'Sorry, no Spam allowed!'
Button(text='退出', command=callback).pack(fill=X)
Button(text='垃圾', command=(lambda: showerror('Spam', errmsg))).pack(fill=X)
mainloop()

我用中文按钮替换英文按钮,出现了中文的对话框。这些对话框按钮是可以按动然后给出选择的,如下两图。
按退出有如下选择

Python基础学习之奇异的GUI对话框

按垃圾有如下选择

Python基础学习之奇异的GUI对话框

四、标准对话框的多栏使用

先做出一个回调演示表的py文件,它可以作为模块反复使用,这就使得对话框的制作多样化起来。我依然把这些对话框的按钮用中文标识,然后再做一个多重的按钮栏文件,于是你看到一个更多功能的对话框图。一个可以打开文件,选择颜色,输入字符等等的对话框。把所有代码的功能全都理解清楚,还没有到火候,但终于可以照葫芦画瓢地把这些图框及其作用显示出来了。
演示按钮集合的py文件demoDIg.py

from tkinter import *
from dialogTable import demos
from quitter import Quitter

class Demo(Frame):
    def __init__(self, parent=None, **options):
        Frame.__init__(self, parent, **options)
        self.pack()
        Label(self, text='Basic demos').pack()
        for (key, value) in demos.items():
            Button(self, text=key, command=value).pack(side=TOP, fill=BOTH)
        Quitter(self).pack(side=TOP, fill=BOTH)

if __name__=='__main__': Demo().mainloop()

执行这个文件,于是出现按钮栏对话框

Python基础学习之奇异的GUI对话框

如果点打开按钮,则打开了window的文档文件

Python基础学习之奇异的GUI对话框

如果点击颜色,则可在颜色框中选择颜色。

Python基础学习之奇异的GUI对话框

如果点击输入,则可在输入框中按要求输入数字。

Python基础学习之奇异的GUI对话框

这个对话框的初步理解,颇有点开人眼界。作为计算机科学中的python语言,真有超越自然语言的诸多功能。冲着这一点,这个编程语言再难,也得一点一点地坚持学下去。

到此这篇关于Python基础学习之奇异的GUI对话框的文章就介绍到这了,更多相关Python GUI对话框内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python实现查询苹果手机维修进度
Mar 16 Python
Python实现的质因式分解算法示例
May 03 Python
pandas进行数据的交集与并集方式的数据合并方法
Jun 27 Python
python opencv人脸检测提取及保存方法
Aug 03 Python
Python wxPython库消息对话框MessageDialog用法示例
Sep 03 Python
python批量修改图片后缀的方法(png到jpg)
Oct 25 Python
解决Python3.5+OpenCV3.2读取图像的问题
Dec 05 Python
python使用BeautifulSoup与正则表达式爬取时光网不同地区top100电影并对比
Apr 15 Python
python实现LRU热点缓存及原理
Oct 29 Python
pytorch模型存储的2种实现方法
Feb 14 Python
关于matplotlib-legend 位置属性 loc 使用说明
May 16 Python
编译 pycaffe时报错:fatal error: numpy/arrayobject.h没有那个文件或目录
Nov 29 Python
教你使用pyinstaller打包Python教程
Matplotlib绘制混淆矩阵的实现
只需要100行Python代码就可以实现的贪吃蛇小游戏
PyTorch dropout设置训练和测试模式的实现
May 27 #Python
pytorch Dropout过拟合的操作
浅谈pytorch中的dropout的概率p
May 27 #Python
让文件路径提取变得更简单的Python Path库
You might like
解决中英文字符串长度问题函数
2007/01/16 PHP
php获取服务器信息的实现代码
2013/02/04 PHP
php之Memcache学习笔记
2013/06/17 PHP
详解PHP使用日期时间处理器Carbon人性化显示时间
2017/08/10 PHP
Laravel 自定命令以及生成文件的例子
2019/10/23 PHP
个人总结的一些关于String、Function、Array的属性和用法
2007/01/10 Javascript
jQuery 使用手册(二)
2009/09/23 Javascript
js 实现复制到粘贴板的功能代码
2010/05/13 Javascript
JQuery报错Uncaught TypeError: Illegal invocation的处理方法
2015/03/13 Javascript
jQuery实现的简单悬浮层功能完整实例
2017/01/23 Javascript
详解Node.js 命令行程序开发教程
2017/06/07 Javascript
Angular.JS中指令ng-if的注意事项小结
2017/06/21 Javascript
vue和webpack打包项目相对路径修改的方法
2018/06/15 Javascript
浅谈在vue中使用mint-ui swipe遇到的问题
2018/09/27 Javascript
BootStrap modal实现拖拽功能
2018/12/01 Javascript
jQuery判断自定义属性data-val用法示例
2019/01/07 jQuery
JS实现商城秒杀倒计时功能(动态设置秒杀时间)
2019/12/12 Javascript
[41:11]完美世界DOTA2联赛PWL S2 Inki vs Magma 第一场 11.22
2020/11/24 DOTA
python中关于时间和日期函数的常用计算总结(time和datatime)
2013/03/08 Python
Python之Scrapy爬虫框架安装及简单使用详解
2017/12/22 Python
django2+uwsgi+nginx上线部署到服务器Ubuntu16.04
2018/06/26 Python
python批量读取文件名并写入txt文件中
2020/09/05 Python
python turtle 绘制太极图的实例
2019/12/18 Python
使用Python Tkinter实现剪刀石头布小游戏功能
2020/10/23 Python
python解包用法详解
2021/02/17 Python
STAY JAPAN台湾:预订日本民宿
2018/07/22 全球购物
一套VC试题
2015/01/23 面试题
大学生写自荐信的技巧
2014/01/08 职场文书
我未来的职业规划范文
2014/01/11 职场文书
能源工程专业应届生求职信
2014/03/01 职场文书
毕业留言寄语大全
2014/04/10 职场文书
党员群众路线剖析材料
2014/10/08 职场文书
2015年个人思想总结
2015/03/09 职场文书
九年级数学教学反思
2016/02/17 职场文书
Mongo服务重启异常问题的处理方法
2021/07/01 MongoDB
前端实现滑动按钮AJAX与后端交互的示例代码
2022/02/24 Javascript