Python 窗口编程 笔记

使用global语句

如果你想要为一个定义在函数外的变量赋值,那么你就得告诉Python这个变量名不是局部的,而是 全局 的。我们使用global语句完成这一功能。没有global语句,是不可能为定义在函数外的变量赋值的。

你可以使用定义在函数外的变量的值(假设在函数内没有同名的变量)。然而,我并不鼓励你这样做,并且你应该尽量避免这样做,因为这使得程序的读者会不清楚这个变量是在哪里定义的。使用global语句可以清楚地表明变量是在外面的块定义的。
————————————————
版权声明:本文为CSDN博主「遇到我的Bug你要裂了」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/budong282712018/article/details/80236191

Python字典包含了以下内置方法:

序号函数及描述
1dict.clear()
删除字典内所有元素
2dict.copy()
返回一个字典的浅复制
3dict.fromkeys(seq[, val])
创建一个新字典,以序列 seq 中元素做字典的键,val 为字典所有键对应的初始值
4dict.get(key, default=None)
返回指定键的值,如果值不在字典中返回default值
5dict.has_key(key)
如果键在字典dict里返回true,否则返回false
6dict.items()
以列表返回可遍历的(键, 值) 元组数组
7dict.keys()
以列表返回一个字典所有的键
8dict.setdefault(key, default=None)
和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
9dict.update(dict2)
把字典dict2的键/值对更新到dict里
10dict.values()
以列表返回字典中的所有值
11pop(key[,default])
删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
12

popitem()
返回并删除字典中的最后一对键和值。

Python字典包含了以下内置函数:

序号函数及描述
1cmp(dict1, dict2)
比较两个字典元素。
2len(dict)
计算字典元素个数,即键的总数。
3str(dict)
输出字典可打印的字符串表示。
4type(variable)
返回输入的变量类型,如果变量是字典就返回字典类型。

字典 https://www.runoob.com/python/python-dictionary.html

Python split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串

返回值

返回分割后的字符串列表。

Python 列表(List)

序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。

创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。

list.append('Google') ## 使用 append() 添加元素

可以使用 del 语句来删除列表的元素

Python列表脚本操作符

列表对 + 和 * 的操作符与字符串相似。+ 号用于组合列表,* 号用于重复列表。

如下所示:

Python 表达式结果描述
len([1, 2, 3])3长度
[1, 2, 3] + [4, 5, 6][1, 2, 3, 4, 5, 6]组合
['Hi!'] * 4['Hi!', 'Hi!', 'Hi!', 'Hi!']重复
3 in [1, 2, 3]True元素是否存在于列表中
for x in [1, 2, 3]: print x,1 2 3迭代

Python列表函数&方法

Python包含以下函数:

序号函数
1cmp(list1, list2)
比较两个列表的元素
2len(list)
列表元素个数
3max(list)
返回列表元素最大值
4min(list)
返回列表元素最小值
5list(seq)
将元组转换为列表

Python包含以下方法:

序号方法
1list.append(obj)
在列表末尾添加新的对象
2list.count(obj)
统计某个元素在列表中出现的次数
3list.extend(seq)
在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
4list.index(obj)
从列表中找出某个值第一个匹配项的索引位置
5list.insert(index, obj)
将对象插入列表
6list.pop([index=-1])
移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
7list.remove(obj)
移除列表中某个值的第一个匹配项
8list.reverse()
反向列表中元素
9list.sort(cmp=None, key=None, reverse=False)
对原列表进行排序

Python Tkinter 标签控件(Label)

Python GUI编程 Python GUI编程

Python Tkinter 标签控件(Label)指定的窗口中显示的文本和图像。

  • 标签控件(Label)指定的窗口中显示的文本和图像。

  • 你如果需要显示一行或多行文本且不允许用户修改,你可以使用 Label 组件。

语法

语法格式如下:

w = Label ( master, option, ... )
  • master: 框架的父容器。

  • options: 可选项,即该标签的可设置的属性。这些选项可以用键-值的形式设置,并以逗号分隔。

root = tk.Tk()

w = tk.Label(root, text="Hello RUNOOB!")

w.pack()

root.mainloop()

序号可选项 & 描述
1

anchor

文本或图像在背景内容区的位置,默认为 center,可选值为(n,s,w,e,ne,nw,sw,se,center)eswn 是东南西北英文的首字母,表示:上北下南左西右东。

2

bg

标签背景颜色

4

bd

标签的大小,默认为 2 个像素

4

bitmap

指定标签上的位图,如果指定了图片,则该选项忽略

5

cursor

鼠标移动到标签时,光标的形状,可以设置为 arrow, circle, cross, plus 等。

6

font

设置字体。

7

fg

设置前景色。

8

height

标签的高度,默认值是 0。

9

image

设置标签图像。

10

justify

定义对齐方式,可选值有:LEFT,RIGHT,CENTER,默认为 CENTER。

11

padx

x 轴间距,以像素计,默认 1。

12

pady

y 轴间距,以像素计,默认 1。

13

relief

边框样式,可选的有:FLAT、SUNKEN、RAISED、GROOVE、RIDGE。默认为 FLAT。

14

text

设置文本,可以包含换行符(\n)。

15

textvariable

标签显示 Tkinter 变量,StringVar。如果变量被修改,标签文本将自动更新。

16

underline

设置下划线,默认 -1,如果设置 1,则是从第二个字符开始画下划线。

17

width

设置标签宽度,默认值是 0,自动计算,单位以像素计。

10

wraplength

设置标签文本为多少行显示,默认为 0。

python 字典中取值的两种方法小结

如下所示:

1

a={'name':'tony','sex':'male'}

获得name的值的方式有两种

1

2

print a['name'],type(a['name'])

print a.get('name'),type(a.get('name'))

发现这两个结果完全一致,并没有任何的差异。

怎么选择这两个不同的字典取值方式呢?

如果字典已知,我们可以任选一个,而当我们不确定字典中是否存在某个键时,我之前的做法如下

1

2

if 'age' in a.keys():

 print a['age']

因为不先判断的话,直接使用a[‘age']会导致报错keyerror,提示没有该key的值。

字典名后接着方括号[]是取值的意思,括号的内容是字典的某一个键key,这样可以获取该键的值value。

Python strip()方法:去除首尾指定的字符

Python 字符串 Python 字符串


描述

Python strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。

注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。

语法

strip()方法语法:

str.strip([chars]);

参数

  • chars -- 移除字符串头尾指定的字符序列。

overrideredirect方法

在Windows平台下,这个函数的作用,视觉上窗体整个边框消失(没有最小化最大化关闭这几个按钮,也无法拖动这个窗体),程序的窗体在Windows系统任务栏上也消失(看不到有这么一个程序在运行),但是Alt+F4关闭窗体的功能还存在。

https://www.pynote.net/archives/1276

Menu 类

menu = tk.Menu(frame, tearoff=0)

将tearoff设置为1以后,就是表明这个菜单是可以独立出来的,能跳出一个悬浮菜单

https://blog.csdn.net/wangyiyan315/article/details/16367551

mbox

mbox 窗口提示

import tkinter.messagebox as mbox

if mbox.askyesno(message='输入你想显示的内容'):

    pass

mbox.showwarning(message='输入你想显示的内容')

Tkinter 组件

Tkinter的提供各种控件,如按钮,标签和文本框,一个GUI应用程序中使用。这些控件通常被称为控件或者部件。

目前有15种Tkinter的部件。我们提出这些部件以及一个简短的介绍,在下面的表:

控件描述
Button按钮控件;在程序中显示按钮。
Canvas画布控件;显示图形元素如线条或文本
Checkbutton多选框控件;用于在程序中提供多项选择框
Entry输入控件;用于显示简单的文本内容
Frame框架控件;在屏幕上显示一个矩形区域,多用来作为容器
Label标签控件;可以显示文本和位图
Listbox列表框控件;在Listbox窗口小部件是用来显示一个字符串列表给用户
Menubutton菜单按钮控件,用于显示菜单项。
Menu菜单控件;显示菜单栏,下拉菜单和弹出菜单
Message消息控件;用来显示多行文本,与label比较类似
Radiobutton单选按钮控件;显示一个单选的按钮状态
Scale范围控件;显示一个数值刻度,为输出限定范围的数字区间
Scrollbar滚动条控件,当内容超过可视化区域时使用,如列表框。.
Text文本控件;用于显示多行文本
Toplevel容器控件;用来提供一个单独的对话框,和Frame比较类似
Spinbox输入控件;与Entry类似,但是可以指定输入范围值
PanedWindowPanedWindow是一个窗口布局管理的插件,可以包含一个或者多个子控件。
LabelFramelabelframe 是一个简单的容器控件。常用与复杂的窗口布局。
tkMessageBox用于显示你应用程序的消息框。

标准属性

标准属性也就是所有控件的共同属性,如大小,字体和颜色等等。

属性描述
Dimension控件大小;
Color控件颜色;
Font控件字体;
Anchor锚点;
Relief控件样式;
Bitmap位图;
Cursor光标;

几何管理

Tkinter控件有特定的几何状态管理方法,管理整个控件区域组织,以下是Tkinter公开的几何管理类:包、网格、位置

几何方法描述
pack()包装;
grid()网格;
place()位置;

# 为菜单添加命令标签
    menu.add_command(label="delete", command=lambda: saveWords.pop(preWord)) 
    menu.add_command(label="exit", command=exit)

获取鼠标点击位置

https://blog.csdn.net/weixin_39624094/article/details/111422857

使用event作为函数参数

相对于应用程序左上角的位置,左键点击的位置是  event.x, event.y

相对于屏幕左上角的位置,左键点击的位置是 event.x_root, event.y_root

python的tkinter窗口位置\坐标\大小等知识(自用笔记)_#姚大姚 的博客-CSDN博客
https://blog.csdn.net/qq_42402648/article/details/109822589

窗口标题: window.title("title_a")

添加窗口图标:window.iconbitmap(icon_file) #icon_file就是一个.ico的图标文件,使用绝对或相对路径

设置窗口大小:

window.geometry("x_WIDTH x x_HEIGHT")  #其中将_WIDTH替换为窗口宽度,将_HEIGHT替换为窗口高度 设置窗口在屏幕上的位置:
window.geometry("+X+Y")    #X/Y表示以屏幕左上角为顶点的窗口的坐标
#或者是
window.geometry("x_WIDTH x x_HEIGHT+X+Y") 

(2)常用的事件处理函数:
刷新窗口状态: window.update()

销毁窗口: window.destroy()

自动触发事件: window.after(sec,command) #表示多少秒以后自动执行command

置顶窗口: window.wm_attributes('-topmost',1)

隐藏窗口外部: window.overrideredirect(True)

设置最大的窗口: window.maxsize(600, 400)

设置最小的窗口: window.minsize(300, 240)

设置窗口是否可以缩放(两种方法):

window.resizable(width=False, height=False)#禁止改变窗口大小

window.resizable(0, 0) # 设置窗口大小不可变

获取窗口属性的方法

winfo_x() 方法获得窗口的x坐标,
winfo_y() 方法获得窗口的y坐标
winfo_width() 方法获得窗口的宽度
winfo_height() 方法获得窗口的高度
以上四个方法都是无参方法,通过返回值我们可以获得窗口的宽高。

弹出式菜单,通过post方法显示显示。

menu.post(event.x_root, event.y_root)

https://blog.csdn.net/wangyiyan315/article/details/16367551

Python多线程编程(一):threading 模块 Thread 类的用法详解

https://blog.csdn.net/briblue/article/details/85101144

我们进行程序开发的时候,肯定避免不了要处理并发的情况。

一般并发的手段有采用多进程和多线程。

但线程比进程更轻量化,系统开销一般也更低,所以大家更倾向于用多线程的方式处理并发的情况。

Python 实现多线程编程需要借助于 threading 模块。

所以,我们要在代码中引用它。

import threading

threading 模块中最核心的内容是 Thread 这个类。

我们要创建 Thread 对象,然后让它们运行,每个 Thread 对象代表一个线程,在每个线程中我们可以让程序处理不同的任务,这就是多线程编程。

创建 Thread 对象有 2 种手段。

直接创建 Thread ,将一个 callable 对象从类的构造器传递进去,这个 callable 就是回调函数,用来处理任务。
编写一个自定义类继承 Thread,然后复写 run() 方法,在 run() 方法中编写任务处理代码,然后创建这个 Thread 的子类。


Thread 对象的类及其参数

class threading.Thread(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)

Thread 的构造方法中,最重要的参数是 target,所以我们需要将一个 callable 对象赋值给它,线程才能正常运行。

如果要让一个 Thread 对象启动,调用它的 start() 方法就好了。

例子

import threading
import time

def test():

    for i in range(5):
        print('test ',i)
        time.sleep(1)


thread = threading.Thread(target=test)
thread.start()

for i in range(5):
    print('main ', i)
    time.sleep(1)

运行结果:

test  0
main  0
main  1
test  1
main  2
test  2
main  3
test  3
main  4
test  4

随机抢时间片,概率相等

Thread 的生命周期

  1. 创建对象时,代表 Thread 内部被初始化。
  2. 调用 start() 方法后,thread 会开始运行。
  3. thread 代码正常运行结束或者是遇到异常,线程会终止。

自定义类继承 Thread(暂不使用)

mainloop

进入到事件(消息)循环。一旦检测到事件,就刷新组件。

https://blog.csdn.net/wangfei8348/article/details/51744968

▲ if __name__=="__main__":

就相当于是 Python 模拟的程序入口。由于模块之间相互引用,不同模块可能都有这样的定义,而入口程序只能有一个,选中哪个入口程序取决于 __name__ 的值。

https://blog.csdn.net/zhusongziye/article/details/79505803

事件绑定

Tkinter使用一种称为事件序列的机制来允许用户第一事件,

用户需使用bind()方法将具体的事件序列与自定义的方法相绑定。

事件序列是以字符串的形式表示,可以表示一个或多个相关联的事件

格式 <modifier-type-detail>

<Motion> 获取鼠标当前位置(实时)

<Button-1>鼠标左键

<Keypress-H>点击键盘H键

<Button-4,5>滚轮的向上滚和向下滚

<Control-Shift-KeyPress-H>同时点击CTRL+SHIFT+H

Key键盘的敲击事件

KeyPress键盘按下的过程

KeyRelease松开的过程

组件必须获得焦点,才能响应键盘来的消息

focus_set获得焦点

keysym按键名

keycode按键码

StringVar是Tk库内部定义的字符串变量类型,在这里用于管理部件上面的字符;不过一般用在按钮button上。改变StringVar,按钮上的文字也随之改变。

Python 利用内置set函数对字符串和列表进行去重的方法

如下所示:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

# coding:utf8

__author__ = 'libingxian'

__date = "20170415"

 

# 由于数据类型set本身具有无序,唯一值的特性,可以用内置函数set对字符串和列表进行去重,挺方便的

str = "asdfasdlklfgklgjsdfjkjl"

se = set(str)

print se

 

li = [1,"2",1,"2","abc","123"]

se = set(li)

print se

 

 

"""

输出结果:

set(['a', 'd', 'g', 'f', 'k', 'j', 'l', 's'])

set([1, '123', '2', 'abc'])

"""

▲ python tkinter 全部组件(widget)及事件类型(event)一览

对于一个简单的GUI程序设计来说,我觉得无非就是三个要素,widget(部件),layout(布局),event(事件的响应)

个人感觉,GUI就和搭积木差不多,widget就好比是各种形状的积木,比如长方形,正方形,三角形等等。layout就 是如何将这些积木搭建成为一个小房子,小木屋。
widget(部件)+event(事件的响应)
tkinter中的widget主要有Button(按钮), Checkbutton(复选按钮),Canvas(画布),Entry(条目), Frame(框架), Label(标签), LabelFrame(标签框架), Listbox(列表框),menu(菜单),Menubutton(菜单按钮),Message (消息),OptionMenu(选项菜单), PanedWindow(中分栏窗口), Radiobutton(单选按钮), Scale(刻度条), Scrollbar(滚动条),Spinbox(整数调节框),Text(文本框), Combobox(下拉列表框), Notebook(笔记本), Progressbar(进度条), Separator(分离器), Sizegrip(尺寸调节器), Treeview(树视图)
https://blog.csdn.net/explorer9607/article/details/82783470

tk.after()方法 睡眠

after(self, ms, func=None, *args)

在给定时间后调用函数一次。
MS以毫秒为单位指定时间。函数给出了
要调用的函数。额外的参数
作为函数调用的参数。返回
使用after_cancel取消调度的标识符。

Tk类提供的after方法不是循环的计时器,

它相当于不会堵塞进程的sleep

需要循环计时的话,就再在函数里面再次after

示例:

widget.after(300, marquee, widget)

root.after(1000, __writeText)

4.3 属性的动态修改
在程序的运行中,难免会动态的修改控件的属性。如何修改呢?非常的简单:
label[‘属性名称’]=新的属性

比如要修改标签的文字,只需要:
label[‘text’]=‘新的标签文字’
所有的控件的属性都可以通过这个方法来修改。后面就不在赘述了。不过并不是所有的控件属性都可以动态修改的,有些属性只能在初始化的时候设定。在控件的生命周期中,不能修改。
————————————————
版权声明:本文为CSDN博主「风华明远」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42272768/article/details/100575802

消息框 mbox

https://www.cnblogs.com/xym4869/p/11643665.html

if条件运算符能简写

label="顺序" if order == 0 else "随机"

https://cloud.tencent.com/developer/ask/53116

在python字典中获取随机值

https://www.imooc.com/wenda/detail/597400

word = random.choice(list(words.items()))

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值