1 开始创建Python GUI

实现代码:

 import tkinter as tk
win = tk.Tk()
win.title("Python GUI")
win.mainloop()

运行结果:

工作原理:

#1 导入tkinter模块并简化命名为tk。

#2 创建Tk类的一个实例并赋给实例变量win。

#3 根据实例变量win的title属性定义窗口的标题。

#4 通过调用mainloop开启窗口。

[注1]:运用Python类(class),首先需要创建一个类的实例,然后将实例赋给一个变量,此变量便具有与该类相同的功能属性。

[注2]:mainloop让GUI处于等待外部事件的无限循环中,当调用此循环后GUI窗口才会显示在屏幕上。

2 禁止GUI窗口尺寸变动

实现代码:

 import tkinter as tk
win = tk.Tk()
win.title("Python GUI")
win.resizable(0, 0)
win.mainloop()

运行结果:用户无法更改GUI窗口尺寸,窗口最大化按钮呈灰色无法使用。

工作原理:

#4 resizable()是Tk类的一个方法,参数(0, 0)阻止窗口尺寸变更(通过传递其它参数可以实现自定义窗口初始尺寸)。

3 添加Label标签并设置其文本属性

实现代码:

 import tkinter as tk
from tkinter import ttk
win = tk.Tk()
win.title("Python GUI")
ttk.Label(win, text="A Label").grid(column=0, row=0)
win.mainloop()

运行结果:

工作原理:

#2 从tkinter中导入ttk模块(tkinter的扩展,包含更高级的控件使窗口更加美观化)。

#5 向ttk.Label()传递窗口实例win并设置其文本属性(标签显示内容),启用网格管理器设置标签显示位置坐标。

[注1]:相较前面窗口,此窗口尺寸变小。原因是当窗口中没有添加控件时,tkinter会使用默认尺寸;当添加控件时,tkinter会在满足定义控件正常显示的前提下,选择尽可能小的窗口尺寸。

4 添加Button按钮并设置其文本属性

实现代码:

 import tkinter as tk
from tkinter import ttk win = tk.Tk()
win.title("Python GUI") # adding a label
aLabel = ttk.Label(win, text="A Label")
aLabel.grid(column=0, row=0) def clickMe():
action.configure(text="** I have been Clicked! **")
aLabel.configure(foreground='red') # adding a button
action = ttk.Button(win, text="Click Me!", command=clickMe)
action.grid(column=1, row=0) win.mainloop()

运行结果:

点击按钮前:

点击按钮后:

工作原理:

#11 事件处理函数,用于响应按钮,执行对标签和按钮文本属性的更改设置。

#16 创建按钮控件,并设置命令为clickMe()函数以及其文本属性。

5 添加text box文本框控件

实现代码:

 import tkinter as tk
from tkinter import ttk win = tk.Tk()
win.title("Python GUI") # adding a label
aLabel = ttk.Label(win, text="Enter a name:")
aLabel.grid(column=0, row=0) def clickMe():
action.configure(text='Hello~' + name.get()) # adding a button
action = ttk.Button(win, text="Click Me!", command=clickMe)
action.grid(column=1, row=1) # adding a textbox entry widget
name = tk.StringVar()
nameEntered = ttk.Entry(win, width=12, textvariable=name)
nameEntered.grid(column=0, row=1) win.mainloop()

运行结果:

初始窗口:

文本框输入Python并点击按钮后窗口:

工作原理:

#12 获取文本框字符并将其设置为按钮显示文本。按钮点击事件是一个回调函数,当按钮被用户点击后,此函数中涉及变量将被系统识别。基于此原理,点击按钮后即可获取文本框输入字符。

#19 声明变量名name为适用于tkinter的StringVar()类型。

#20 创建文本框并设置宽度以及绑定文本框字符变量为name。

#21 设置文本框显示位置坐标。

[注1]:Python是一种动态类型语言,是从所赋给变量的值来推断变量的类型。例如,在给一个变量名赋值一个字符串后,此变量即成为字符串类型。

[注2]:在tkinter中,必须声明变量名为StringVar()类型后才能正确使用,这是因为tkinter与Python并不是同一种语言,我们这里只是在Python中进行调用而已。

6 设置光标cursor和禁用GUI控件

添加代码:

 nameEntered.focus()
action.configure(state='disabled')

运行结果:

工作原理:

#1 通过调用tkinter控件实例的focus()方法给文本框设置光标。

#2 设置按钮状态属性以禁用按钮功能。

7 combo box组合框控件

添加代码:

 ttk.Label(win, text="Choose a number:").grid(column=1, row=0)
number = tk.StringVar()
numberChosen = ttk.Combobox(win, width=12, textvariable=number)
numberChosen['values'] = (1, 2, 4, 42, 100)
numberChosen.grid(column=1, row=1)
numberChosen.current(0)

运行结果:

工作原理:

#3 创建一个组合框控件,并设置其宽度和文本变量。

#4 设置下拉菜单中待选内容。

#5 设置组合框位置坐标。

#6 设置组合框默认显示内容。

修改代码:

 numberChosen = ttk.Combobox(win, width=12, textvariable=number, state='readonly')
def clickMe():
action.configure(text='Hello~' + name.get() + ' ' + numberChosen.get())

运行结果:

工作原理:

#1 实现用户只能选择输入下拉菜单中内容,无法输入自定义内容。

#3 按钮文本显示文本框和组合框输入内容。

8 创建不同初始状态下checkbutton

添加代码:

 # creating three checkbuttons
chVarDis = tk.IntVar()
check1 = tk.Checkbutton(win, text="Disabled", variable=chVarDis, state="disabled")
check1.select()
check1.grid(column=0, row=4, sticky=tk.W) chVarUn = tk.IntVar()
check2 = tk.Checkbutton(win, text="Unchecked", variable=chVarUn)
check2.deselect()
check2.grid(column=1, row=4, sticky=tk.W) chVarEn = tk.IntVar()
check3 = tk.Checkbutton(win, text="Enabled", variable=chVarEn)
check3.select()
check3.grid(column=2, row=4, sticky=tk.W)

运行结果:

工作原理:

#2 声明变量名chVarDis为适用于tkinter的IntVar()类型。

#3 创建检查按钮。第一个参数为检查按钮放置的所在控件;第二个参数为检查按钮显示标签的文本内容;

#3 第三个参数为按钮的状态变量,将其与定义的IntVar()类型变量绑定。因为检查按钮的状态(checked or unchecked)由0和1表示,故将#2中变量定义为IntVar()类型。

#4 通过调用select()方法在检查按钮前放置检查符号√。

#5 设置检查按钮放置位置坐标,并将sticky设为tk.W(表示按钮将以左对齐方式显示)。

#9 通过调用deselect()方法在检查按钮前取消放置检查符号√。

9 radio button单选按钮控件

添加代码:

 # radiobuttons globals
COLOR1 = "Blue"
COLOR2 = "Gold"
COLOR3 = "Red" # radiobutton callback
def radCall():
radSel=radVar.get()
if radSel == 1: win.configure(background=COLOR1)
elif radSel == 2: win.configure(background=COLOR2)
elif radSel == 3: win.configure(background=COLOR3) # create three radionbuttons
radVar = tk.IntVar()
rad1 = tk.Radiobutton(win, text=COLOR1, variable=radVar, value=1, command=radCall)
rad1.grid(column=0, row=5, sticky=tk.W) rad2 = tk.Radiobutton(win, text=COLOR2, variable=radVar, value=2, command=radCall)
rad2.grid(column=1, row=5, sticky=tk.W) rad3 = tk.Radiobutton(win, text=COLOR3, variable=radVar, value=3, command=radCall)
rad3.grid(column=2, row=5, sticky=tk.W)

运行结果:

工作原理:

#2/3/4 创建模块级全局变量,在创建单选框按钮和设置背景颜色时用到。

#7 回调函数,根据用户选择设置窗口背景颜色。

#14 声明变量名radVar为适用于tkinter的IntVar()类型,为三个单选按钮所共用。

#15-22 创建三个单选按钮,设置按钮标签显示内容,绑定按钮变量,设置数值及命令等。

10 scrolled text滚动文本框控件

实现代码:

 from tkinter import scrolledtext

 # Using  scrolled text control
scrolW = 30
scrolH = 3 scr = scrolledtext.ScrolledText(win, width=scrolW, height=scrolH, wrap=tk.WORD)
scr.grid(column=0, columnspan=3)

运行结果:

工作原理:

#1 导入包含滚动文本框控件的模块。

#4/5  设置滚动文本框控件的高度和宽度。

#7 创建滚动文本框控件,设置宽度和高度,并设置文本自动换行。

#8 通过设置columnspan=3使得滚动文本框将占用三列空间,而不是全部位于第一列。

11 将几个控件添加到循环中

实现代码:

 # change radiobuttons global variables into a list
colors = ["Blue", "Gold", "Red"] radVar = tk.IntVar()
radVar.set(99) for col in range(3):
curRad = 'rad' + str(col)
curRad = tk.Radiobutton(win, text=colors[col], variable=radVar, value=col, command=radCall)
curRad.grid(column=col, row=5, sticky=tk.W) def radCall():
radSel=radVar.get()
if radSel == 0: win.configure(background=colors[0])
elif radSel == 1: win.configure(background=colors[1])
elif radSel == 2: win.configure(background=colors[2])

运行结果:

工作原理:

#2 创建一个列表来表示这几个全局变量。

#5 设置一个单选按钮之外的初始值(0~2之外的数值),否则在默认情况下,当窗口出现的同时将有一个单选按钮被选中。

#7 将三个单选按钮的创建和位置设置用一个for循环来实现。

#12 相应地修改回调函数中的索引号和背景颜色设置。

未完待续……

本文章属于原创作品,欢迎大家转载分享,禁止修改文章的内容。尊重原创,转载请注明来自:躬耕南阳  https://www.cnblogs.com/yangmi511/

(一)Python GUI 创建及添加部件的更多相关文章

  1. C++ GUI Qt4编程-创建自定义窗口部件

    C++ GUI Qt4编程-创建自定义窗口部件   Qtqt4 通过Qt窗口部件进行子类化或者直接对QWidget进行子类化,就可以创建自定义窗口部件,下面示范两种方式,并且也会说明如何把自定义窗口部 ...

  2. Python GUI - tkinter

    目录: Tkinter 组件 标准属性 几何管理 代码实例: 1. Label & Button 2. Entry & Text 3.Listbox列表 4.Radiobutton单选 ...

  3. Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) JAVA日志的前世今生 .NET MVC采用SignalR更新在线用户数 C#多线程编程系列(五)- 使用任务并行库 C#多线程编程系列(三)- 线程同步 C#多线程编程系列(二)- 线程基础 C#多线程编程系列(一)- 简介

    Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) 一.前言 由于本篇文章较长,所以下面给出内容目录方便跳转阅读,当然也可以用博客页面最右侧的文章目录导航栏进行跳转查阅. 一.前言 ...

  4. 简单的python GUI例子

    写一个简单的界面很容易,即使是什么都不了解的情况下,这个文本转载了最简单的界面编写,下个文本介绍了TK的简单但具体的应用 在python中创建一个窗口,然后显示出来. from Tkinter imp ...

  5. QT GUI @创建新的工程

    开发环境: Qt 4.5 Qt Creator 1.3.0 新工程创建步骤: 1. 单击运行Qt Creator,进入欢迎页面.选择"File" -> "New F ...

  6. 使用PyQt来编写第一个Python GUI程序

    原文:使用PyQt来编写第一个Python GUI程序 本文由 伯乐在线 - Lane 翻译,Daetalus 校稿.未经许可,禁止转载!英文出处:pythonforengineers.com.欢迎加 ...

  7. python GUI实战项目——tkinter库的简单实例

    一.项目说明: 本次通过实现一个小的功能模块对Python GUI进行实践学习.项目来源于软件制造工程的作业.记录在这里以复习下思路和总结编码过程.所有的源代码和文件放在这里: 链接: https:/ ...

  8. python GUI图形化编程-----wxpython

    一.python gui(图形化)模块介绍: Tkinter :是python最简单的图形化模块,总共只有14种组建 Pyqt     :是python最复杂也是使用最广泛的图形化 Wx       ...

  9. Python GUI 编程

    Python GUI编程(Tkinter) Python 提供了多个图形开发界面的库,几个常用 Python GUI 库如下: Tkinter: Tkinter 模块(Tk 接口)是 Python 的 ...

随机推荐

  1. https搭建(自签名证书)

    博客搬家: https搭建(自签名证书) 上一篇博客探究了https(ssl)的原理,为了贯彻理论落实于实践的宗旨,本文将记录我搭建https的实操流程,使用Apache2+ubuntu+openss ...

  2. [terminal]关于进度条的学习

    在PowerShell中隐藏光标 在pip的源码C:\Python36\Lib\site-packages\pip\utils\ui.py中发现了: @contextlib.contextmanage ...

  3. Spring Boot2 系列教程(三十二)Spring Boot 整合 Shiro

    在 Spring Boot 中做权限管理,一般来说,主流的方案是 Spring Security ,但是,仅仅从技术角度来说,也可以使用 Shiro. 今天松哥就来和大家聊聊 Spring Boot ...

  4. 幸存者偏差Survivorship Bias

    "最不符合逻辑的地方,一定埋藏着最深刻的逻辑."——余秋雨<行者无疆> 为什么要说幸存者偏差? 因为2018年全国II卷的描述即为典型的“幸存者偏差”,且这一例子被引入 ...

  5. python 安装pyinstaller

    pip install https://github.com/pyinstaller/pyinstaller/archive/develop.tar.gz

  6. Ubuntu下LAMP的环境配置教程

    总体来说,Ubuntu下安装LAMP环境是比较简单的,只需按照命令行执行即可,记录操作以备不时之需. 一,首先更新Ubuntu里面所有的软件 sudo apt-get update 二.之后安装Apa ...

  7. css中伪类和伪元素

    伪类和伪元素时对那些我们不能通过class.id等选择元素的补充 伪类的操作对象是文档树中已有的元素(可以给已有元素加了一个类替代),而伪元素则创建了一个文档数外的元素(可以添加一个新元素替代) CS ...

  8. IntelliJ 更改项目使用的 JDK 版本

    在当前使用的 IntelliJ 中的 JDK 版本为 1.8,如何修改 IntelliJ 使用的 JDK 版本为 1.11 呢? 你可以在 IntelliJ 中进行修改. 选择 File 后,然后选择 ...

  9. Redis 为什么这么快?

    1. 纯内存操作,肯定快 数据存储在内存中,读取的时候不需要进行磁盘的 IO 2. 单线程,无锁竞争损耗 单线程保证了系统没有线程的上下文切换 使用单线程,可以避免不必要的上下文切换和竞争条件,没有多 ...

  10. 聊聊GIS数据的四个分层与GIS服务

    本篇不讨论矢量栅格数据的结构,也不讨论矢量与栅格的区别(即设定读者有这方面的基础). 版权声明:原创.博客园/B站/小专栏/知乎/CSDN @秋意正寒 转载请标注原地址并声明转载: https://w ...