博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第一个GUI程序
阅读量:6715 次
发布时间:2019-06-25

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

Python GUI 开发有好几个第三方的库,我选择的是tkinter

最简单的一个GUI程序

import tkinter as tk//给库来个简写,用的时候简洁一点root = tk.Tk()//初始化一个根窗口root.mainloop()//放入主运行循环
class Tk(Misc, Wm):    """Toplevel widget of Tk which represents mostly the main window    of an application. It has an associated Tcl interpreter."""//Tk是一个类,代表程序的主窗口(我觉得用窗口比较好理解,也可以理解为控件),根窗口

一个程序只能创建一个根窗口,并且需要在所有其他控件之前创建.

最后,只有将窗口放到主运行循环中,窗口才会显示.

clipboard.png

有了主窗口,接着我们可以往上面添加其他控件,

添加一个Hello,world的label

和iOS开发差不多,有三步

  1. 创建控件
  2. 设置属性
  3. 添加控件

在初始化根窗口后添加如下代码,并运行

helloworld_label = tk.Label(root,text='hello,world')//创建label并设置属性helloworld_label.pack()//把控件包装到父控件中

图片描述

拉大根窗口

图片描述

label中没有pack方法,向上查找Widget中也没有,但是Widget继承自Pack,Pack对象中有一个属性pack,对应了pack_configure方法

pack = configure = config = pack_configure          ...          Base class to use the methods pack_* in every widget."""     def pack_configure(self, cnf={}, **kw):         """Pack a widget in the parent widget. Use as options:           包装一个控件到父控件中,使用下面的选项         after=widget - pack it after you have packed widget:在包装某个控件之后包装         anchor=NSEW (or subset) - position widget according to                                   given direction:根据给定方向摆放         before=widget - pack it before you will pack widget:在包装某个控件之前包装         expand=bool - expand widget if parent size grows:当父控件尺寸变化,更改其大小         fill=NONE or X or Y or BOTH - fill widget if widget grows         in=master - use master to contain this widget         in_=master - see 'in' option description         ipadx=amount - add internal padding in x direction         ipady=amount - add internal padding in y direction         padx=amount - add padding in x direction         pady=amount - add padding in y direction         side=TOP or BOTTOM or LEFT or RIGHT -  where to add this widget.         """         self.tk.call(               ('pack', 'configure', self._w)               + self._options(cnf, kw))

通过参数可以对子控件进行相关配置

如pack(side='bottom'),拉大窗口,文字仍旧居于底部
图片描述

注意

label控件不同于iOS里面的label,此处,除了用于展示文本,还可以用于展示图片

按钮的使用

学习控件都有固定的模板,无非是创建,设置属性(包括布局),添加.接着我们一起探索一下按钮的使用.

点击按钮将label文字改为hello,python

在label包装代码后面添加如下代码

change_button = tk.Button(root,text='click me',command=change_word)change_button.pack(side='top')...def change_word():    change_button.setvar('hello,python')

按照我的推测,应该拿到label,在执行set方法赋值,结果竟然....不行.参考了下别人.

需要用tk中的StringVar存储字符串变量,以及一开始设置的时候不用text属性而用textvariable

修改

def change_word():    var.set('hello,python')... var = tk.StringVar(value='hello,world')helloworld_label = tk.Label(root,textvariable=var)

注意

函数定义如果放在下面会找不到方法,需要放在用到之前.

我感到有些郁闷,自己探索该怎么发现会用到tk中的StringVar呢?不过很快我就释然了,这些基本用法,文档都应该写清楚的,知道怎么用就好了,不必深究

设置根窗口大小

root.geometry('300x200')

我觉得*更合理,没想到真的是x

转载地址:http://dlelo.baihongyu.com/

你可能感兴趣的文章
2016年终总结
查看>>
KindEditor
查看>>
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".错误的解决方法
查看>>
图像处理之基础---卷积,滤波,平滑
查看>>
laravel框架——保存用户登陆信息(session)
查看>>
mapreduce 读写Parquet格式数据 Demo
查看>>
大白话系列之C#委托与事件讲解大结局
查看>>
云岸数字
查看>>
POJ 1222 EXTENDED LIGHTS OUT (熄灯问题)
查看>>
CSS知识点整理(1):CSS语法,层叠次序,选择器,其他重要方面。
查看>>
IIS部署错误解决集合
查看>>
什么是大数据时代的思维?
查看>>
20162329 实验五:数据结构综合应用
查看>>
刀剑如梦
查看>>
asp.net <%%> <%#%><%=%><%@%><%$%>用法与区别
查看>>
数据结构_1 排序
查看>>
WinEdt选项卡配置
查看>>
机器学习---文本特征提取之词袋模型(Machine Learning Text Feature Extraction Bag of Words)...
查看>>
oracle入门必备
查看>>
复习知识6月12日 sql语句
查看>>