第13.3节 图形界面开发tkinter

一、 引言
老猿最开始是准备就tkinter单独开一个章节,但学了一段时间tkinter,最后放弃了,前一阵子还准备干脆不介绍相关的内容。主要原因有三个,一是tkinter没有界面设计的工具,所有界面布局靠开发人员代码完成,操作很麻烦;二是tkinter模块老猿认为还不成熟,具体来说,老猿遇到了一个问题,这个问题至今没有解决,这个问题老猿并不认为是单一的问题,而是对于复杂的需求tkinter的响应存在异常(具体问题请见《Python tkinter图形界面BUTTON事件控制和编辑框返回值出现异常》);三是有朋友推荐了好用的Python图形开发工具PyQt,虽然老猿至今也就知道了这个词,但给了老猿新的希望。因此老猿放弃了tkinter的学习和详细介绍。
但老猿还是基于半吊子的学习简单介绍一下tkinter,因为缺少它总感觉基础篇不完整。

二、 使用tkinter定义主窗口

  1. tkinter是Python图形开发的一个模块,使用前需要导入该模块。如:
    import tkinter as tk

  2. 在开发图形界面时,需要生成一个图形界面主窗口,所有后续组件都基于该主窗口布局。主窗口的生成语句调用tk.TK函数:
    mainwin = tk.Tk()

  3. 主窗口生成后可以调整大小,如将其设置为800*600:
    mainwin.geometry(‘800x600’)

  4. 可以设置窗口标题,如:
    mainwin.title(‘LaoYuanPython tkinter学习’)

  5. 最后执行mainwin.mainloop让窗口活起来可以响应操作。如:
    mainwin.mainloop()

如果窗口上还需放置其他控件,该语句应该是在所有控件布局后再执行。

三、 窗口内放置控件

  1. 布局标签
  1. 定义标签,第一个参数为标签要放置到的窗口
    l = tk.Label(mainwin,
    text=‘老猿Python’, # 标签的文字
    bg=‘white’, # 背景颜色
    font=(‘Arial’, 16), # 字体和字体大小
    width=60, height=4 # 标签长宽
    )
  2. 固定标签在窗口的位置
    l.pack()
  1. 布局文本编辑框
    text = tk.Entry(mainwin,show=’*’)
    text.pack()

  2. 布局按钮

  1. 定义按钮响应函数输出文本框输入内容
    def onpressbutton():
    print(“按钮被触动”)
    str=text.get()
    print(“输入内容为:”,str)
  2. 定义和布局按钮
    button = tk.Button(mainwin,text=“OK”,width=15,height=2,command=onpressbutton)
    button.pack()

定义触发事件时的函数(注意:因为Python的执行顺序是从上往下,所以函数一定要放在按钮定义的上面)

  1. 布局Frame
    Frame 是一个在 Windows 上分离小区域的部件, 它能将 Windows 分成不同的区,然后存放不同的其他部件. 同时一个 Frame 上也能再分成两个 Frame, Frame 可以认为是一种界面容器。
    frm = tk.Frame(mainwin)
    frm.pack()

对应控件如果要放到对应frame,需要在定义控件时的第一个窗口实例需要使用frame的实例。

  1. 布局菜单
  1. 创建一个菜单栏,这里我们可以把他理解成一个容器,在窗口的上方
    menubar = tk.Menu(mainwin)
    mainwin[‘menu’] = menubar
  2. 定义一个空菜单单元
    filemenu = tk.Menu(menubar, tearoff=0)
  3. 将上面定义的空菜单命名为“文件”,放在菜单栏中,就是装入那个容器中
    menubar.add_cascade(label=‘文件’, menu=filemenu)
  4. 定义菜单响应函数
    def showmenu():
    print(“菜单被点击”)
  5. 在“文件”中加入 “新建”、“打开”、“保存”的小菜单,如果点击这些单元, 就会触发showmenu的功能
    filemenu.add_command(label=‘新建’, command= showmenu)
    filemenu.add_command(label=‘打开’, command= showmenu)
    filemenu.add_command(label=‘保存’, command= showmenu)

当然tkinter模块远不止老猿现在介绍的这些控件,主程序窗口也还有其他市县方案、事件的处理也比本节介绍的更丰富,但其他内容老猿理解不深甚至没有学习,而网上关于tkinter的材料比较多,老猿在此就不再介绍了。

四、 本节对应完整源代码

from tkinter import messagebox as msgbox
import tkinter as tk

def onpressbutton():
   print("按钮被触动")
   str=text.get()
 
   msgbox.showinfo(message=(f"输入内容为:{str}"))

def showmenu():
    msgbox.showinfo(message=('点击了菜单'))
  
mainwin = tk.Tk()
mainwin.geometry('800x600')

mainwin.title('LaoYuanPython tkinter学习')
l = tk.Label(mainwin, 
    text='老猿Python',    # 标签的文字
    bg='white',     # 背景颜色
    font=('Arial', 16),     # 字体和字体大小
    width=60, height=4  # 标签长宽
    )
l.pack()
    
input = tk.StringVar()   
text =  tk.Entry(mainwin,show='*')
text.pack()
   
button = tk.Button(mainwin,text="显示输入内容",width=15,height=2,command=onpressbutton)
button.pack()


menubar = tk.Menu(mainwin)
mainwin['menu'] = menubar
filemenu = tk.Menu(menubar, tearoff=0)
menubar.add_cascade(label='文件', menu=filemenu)   
filemenu.add_command(label='新建', command= showmenu)
filemenu.add_command(label='打开', command= showmenu)
filemenu.add_command(label='保存', command= showmenu)

老猿Python,跟老猿学Python!
博客地址:https://blog.csdn.net/LaoYuanPython

请大家多多支持,点赞、评论和加关注!谢谢!

这是一个VB6的IDE插件(Addin),使用VB6的IDE直接设计Python界面Python和VB都是能让人快乐的编程语言,我使用了Python之后,很多自己使用的工具都使用Python开发或改写了,因为最终实现的Python代码实在太短了(相比VB),有时候Python一行代码就可以实现VB一个函数的功能。 Python就是这种让人越用越开心的语言。 不过说实在,使用Python开发GUI界面还是麻烦了一些了,自带的标准Tkinter使用起来非常简单,不过对于习惯了VB拖放控件完成界面设计的偶来说,还是不够人性化。TK也有一个工具叫GUI Builder,不过它使用Layout布局,不够直观,而且用起来很不爽。。 至于PyQt/wxPython等GUI,尽管有可视化设计工具,但总感觉做一般的轻量级应用是杀鸡用牛刀, 而且不够环保,不够低碳,要带一个很大的,需要目标机器上夜同样安装了PyQt/wxPython,做不了绿色软件。 所以最终的结果是我更喜欢Tkinter,用起来很简单,绿色环保,真正的跨平台,一个py文件到处运行(担心泄密就编译成pyc)。 很多人都认为TK的界面不够美观,不过我经过多次实验后发现导入Python自带的标准TTK主题界面非常Native,不输PyQt/wxPython。 此Addin默认启用TTK支持,也可选择关闭。 总而言之,轻量级GUI,TK+TTK足够。 使用此Addin,你可以不用写一句代码就可以生成一个完整可运行的Python的GUI界面,支持2.X和3.X。 安装方法:将压缩包解压到你希望的目录,然后执行Setup.exe完成注册插件过程,打开VB6就可以用了。 在VB窗体上设计完成界面后(你可以大胆的设置各控件的属性,Addin尽量将其翻译为tkinter的控件属性),点工具栏上的VisualTkinter(图标为一片羽毛),再点'生成代码'按钮,即可生成可运行的Python代码,可以拷贝至剪贴板或保存至文件。 一般情况下你可以不用再改变tkinter的控件属性,但是如果你熟悉tkinter,需要更多的控制,可以一一核对各属性,并且修改,再生成代码。 当然除了用来设计界面外,此ADDIN内置的各控件属性列表可以做为编程参考,比较完整,除了极少数我认为大多数人都不用的属性外,属性定义基本上是我从官方的tkinter文档直接翻译的。 如果还没有VB6,网上找一个VB6精简版即可,不到20M,小巧玲珑。 代码已经在Github上托管,更新的版本可以在这上面找到,需求也可以在上面提: https://github.com/cdhigh/Visual-Tkinter-for-Python
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LaoYuanPython

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值