Python Thinker GUI的组件的简单总结

article/2025/8/20 13:05:30

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、Label
  • 二、Button
  • 三、Entry
  • 四、Text
  • 五、CheckButton
  • 六、RadioButton
  • 七、Menu
  • 八、Canvas
  • 九、Scale


前言

例如:随之前学过Java的基础,其中学过Java的GUI,但是总觉得Java的GUI布局方方面面比较繁琐,因此今天来学学Python的GUI,顺便做个总结

Thinker的布局:

 

一、Label

Label简单来说就是标签

from tkinter import Label
from tkinter.tix import Tkfrom thinker import *window = Tk()
window.title('My windows')
window.geometry('500x500')
l = Label(window, text='你好!第一个GUI', bg='white', fg='black', font=('Bell MT', 10), width=50, height=5)
l.pack()  # 自动调节尺寸,pack 按照组件的创建顺序将子组件添加到父组件中, 按照垂直或者水平的方向自然排布。 如果不指定任何选项, 默认在父组件中自顶向下垂直添加组件。
# l.place(x=,y=)if __name__ == '__main__':window.mainloop()  # 窗口循环,不断刷新window窗口

二、Buuton

activebackground:当鼠标放上去时,按钮的背景色
activeforeground:当鼠标放上去时,按钮的前景色
bd:按钮边框的大小,默认为 2 个像素
bg:按钮的背景色
command:按钮关联的函数,当按钮被点击时,执行该函数
fg:按钮的前景色(按钮文本的颜色)
font:文本字体
height:按钮的高度
highlightcolor:要高亮的颜色
image:按钮上要显示的图片
justify:显示多行文本的时候,设置不同行之间的对齐方式,可选项包括LEFT, RIGHT, CENTER
padx:按钮在x轴方向上的内边距(padding),是指按钮的内容与按钮边缘的距离
pady:按钮在y轴方向上的内边距(padding)
relief:边框样式,设置控件3D效果,可选的有:FLAT、SUNKEN、RAISED、GROOVE、RIDGE。默认为 FLAT。
state:设置按钮组件状态,可选的有NORMAL、ACTIVE、 DISABLED。默认 NORMAL。
underline:下划线。默认按钮上的文本都不带下划线。取值就是带下划线的字符串索引,为 0 时,第一个字符带下划线,为 1 时,前两个字符带下划线,以此类推
width:按钮的宽度,如未设置此项,其大小以适应按钮的内容(文本或图片的大小)
wraplength:限制按钮每行显示的字符的数量
text:按钮的文本内容
anchor:锚选项,控制文本的位置,默认为中心
from tkinter import Tk, Label, StringVar, Buttonfrom thinker import *window = Tk()
window.title('Window Button')
window.geometry('500x500')
var = StringVar()  # 将label的内容设置为字符类型
l = Label(window, textvariable=var, bg='white', fg='black', font=('Bell MT', 10), width=30, height=3)
l.pack()def click(onclick=0):if onclick == 0:onclick = Truevar.set('点击Button按钮后显示')else:var.set('')button = Button(window, text='点我啊 求你了', font=('Bell Mt', 10), width=30, height=3, command=click)
button.place(x=110, y=60)
if __name__ == '__main__':window.mainloop()

三、Entry

bg:输入框背景颜色
bd:边框的大小,默认为 2 个像素
cursor:光标的形状设定,如arrow, circle, cross, plus 等
font:文本字体
exportselection:默认情况下,你如果在输入框中选中文本,默认会复制到粘贴板,如果要忽略这个功能刻工艺设置 exportselection=0。
fg:文字颜色。值为颜色或为颜色代码,如:'red','#ff0000'
highlightcolor:文本框高亮边框颜色,当文本框获取焦点时显示
justify:显示多行文本的时候,设置不同行之间的对齐方式,可选项包括LEFT, RIGHT, CENTER
relief:边框样式,设置控件3D效果,可选的有:FLAT、SUNKEN、RAISED、GROOVE、RIDGE。默认为 FLAT。
selectbackground:选中文字的背景颜色
selectborderwidth:选中文字的背景边框宽度
selectforeground:选中文字的颜色
show:指定文本框内容显示为字符,值随意,满足字符即可。如密码可以将值设为 show="*"
state:默认为 state=NORMAL, 文框状态,分为只读和可写,值为:normal/disabled
textvariable:文本框的值,是一个StringVar()对象
width:文本框宽度
xscrollcommand:设置水平方向滚动条,一般在用户输入的文本框内容宽度大于文本框显示的宽度时使用。
insert:文本框插入数据到指定位置
delete:删除文本框数据
show:文本框显示的字符
get:获取文本框的数据
from tkinter import Tk, Entryfrom thinker import *window = Tk()
window.title("Window Entry")
window.geometry('500x500')
entry_cipher_text = Entry(window, show='*', font=('Bell Mt', 12))  # 显示成密文
entry_plain_text = Entry(window, font=('Bell Mt', 12))  # 明文
entry_plain_text.pack()
entry_cipher_text.pack()if __name__ == '__main__':window.mainloop()

简单的登录判断:

from tkinter import Tk, Label, Button, Entry, StringVarfrom thinker import *window = Tk()
window.title('登录页面')
window.geometry('500x300')
var = StringVar()  # 将label的内容设置为字符类型
l = Label(window, textvariable=var, bg='green', fg='white', font=('Bell MT', 12), width=30, height=3)
l.pack()
label_username = Label(window, text='用户名', fg='black', font=('Bell MT', 8), width=5, height=1)
label_password = Label(window, text='密码', fg='black', font=('Bell MT', 8), width=5, height=1)
label_username.place(x=120, y=60)
label_password.place(x=120, y=80)
username = StringVar()
password = StringVar()
entry_cipher_username = Entry(window, textvariable=username, show='*', font=('Bell Mt', 12))  # 显示成密文
entry_cipher_password = Entry(window, textvariable=password, show='*', font=('Bell Mt', 12))  # 显示成密文
entry_cipher_username.pack()
entry_cipher_password.pack()def login(entry_cipher_useranme=None):user = username.get()passwd = password.get()if user == 'Aiwin' and passwd == '123456':var.set('登录成功')else:var.set('登录失败')login_button = Button(window, text='登录', font=('Bell MT', 12), width=30, height=3, command=login)
login_button.pack()if __name__ == '__main__':window.mainloop()

四、Text

获取Text内容:text.get(index1,index2),textdump(index1,index2,command=None,**kw) 
替换text的内容:text.replace(index1,index2,char) 
搜索文本内容:text.search(pattern, index, stopindex=None, forwards=None, backwards=None, exact=None, regexp=None, 
nocase(是否忽略大小写)=None, count(存放搜索到的数量)=None) 
插入文本内容:text.insert(index,chars)
from tkinter import Tk, Textfrom thinker import *window = Tk()
window.title('My Text')
window.geometry('500x500')
text = Text(window, width=50, height=3, font=('Bell MT', 10), fg='black')
text.pack()if __name__ == '__main__':window.mainloop()

五、CheckButton

image:是否使用图标
selectimage:选中后的图片
offvalue:没有选择的状态值,可以是很多类型的数值
onvalue:选择的状态值,可以是很多类型的数值
variable:控制变量的值
command:关联的函数
variable:变量的值,1或0,代表选中或不选中
from tkinter import Tk, Checkbutton, Label, StringVar, Button, Entry, IntVar, ENDfrom thinker import *window = Tk()
window.title('My CheckButton')
window.geometry('500x500')l = Label(window, text='你喜欢Aiwin吗?', bg='white', fg='black', font=('Bell MT', 10), width=20, height=3)
l.pack()def show_select():entry.delete(0,END)if var_one.get() == 1 and var_two.get() == 0:entry.insert(0, '我超喜欢他的')elif var_one.get() == 0 and var_two.get() == 1:entry.insert(0, '我超讨厌他的')elif var_one.get() == 0 and var_two.get() == 0:entry.insert(0, '我不喜欢也不讨厌他')var_one = IntVar()
var_two = IntVar()
check_button_one = Checkbutton(window, text='喜欢', onvalue=1, offvalue=0, variable=var_one,command=show_select)
check_button_two = Checkbutton(window, text='不喜欢', onvalue=1, offvalue=0, variable=var_two,command=show_select)
check_button_one.pack()
check_button_two.pack()entry = Entry(window, font=('Bell Mt', 12))
entry.pack()if __name__ == '__main__':window.mainloop()

六、RadioButton

selectcolor:选中区的颜色
selectimage:选中区的图像,选中会出现
actibebackground:鼠标悬停时按钮的背景颜色
activeforeground:鼠标悬停单选按钮的前景色
image:显示此radiobutton的图形图像而不是文本,请将此选项设置为图像对象
variable:控制变量
value:控制变量设置的选项
command:指定事件处理函数
textvariable:文本内容变量
from tkinter import Tk, Radiobutton, Label, Button, messagebox, StringVarfrom thinker import *window = Tk()
window.title('My RadioButton')
window.geometry('500x500')
label = Label(window, text='选择你喜欢的编程语言', bg='white', fg='black', font=('Bell MT', 20), width=50, height=5)
label.pack()
value = StringVar()
radiobutton_python = Radiobutton(window, text='Python', value='Python', variable=value, fg='black',font=('Bell MT', 10),activebackground='green')
radiobutton_java = Radiobutton(window, text='Java', value='Java', variable=value, fg='black',font=('Bell MT', 10),activebackground='green')
radiobutton_go = Radiobutton(window, text='Go', value='Go', variable=value, fg='black',font=('Bell MT', 10),activebackground='green')
radiobutton_php = Radiobutton(window, text='PHP', value='PHP', variable=value, fg='black',font=('Bell MT', 10),activebackground='green')
radiobutton_python.pack()
radiobutton_java.pack()
radiobutton_go.pack()
radiobutton_php.pack()def confirm():messagebox.showinfo('选择','你选择的课程是:'+value.get())button_confirm = Button(window, text='确定', command=confirm)
button_confirm.pack()if __name__=='__main__':window.mainloop()

七、Menu

add_command(options):将菜单项添加到菜单中
add_cascade():通过将给定菜单和父菜单关联,创建新的分层菜单
add_checkbutton(options):创建一个检查按钮菜单项
add_radiobutton(options):创建一个勾选菜单项
add_sparator():在菜单中添加分割项
tearoff属性:通常情况下,菜单可以被撕掉,第一个位置(位置0)在选择列表中被删除元素占据,并且额外的选择从位置1开始。如果您设置了tearoff=0,菜单将不会有一个tearoff特性,并且选择将从位置0开始添加。
from tkinter import Tk, Menu, Label, Entry, ENDfrom thinker import *window = Tk()
window.title('My menu')
window.geometry('500x500')
entry = Entry(window, width=20)
entry.pack()def select(n):entry.delete(0, END)value = nentry.insert(0, '你选择的是:'+value)menu = Menu(window, tearoff=0)
file_menu = Menu(menu, tearoff=0)
name_list = ['创建', '打开', '保存']
menu.add_cascade(label='操作', menu=file_menu)
for name in name_list:file_menu.add_command(label=name, command=lambda n=name: select(n))
file_menu.add_separator()
file_menu.add_command(label='停止', command=window.quit)
editmenu = Menu(menu, tearoff=0)
menu.add_cascade(label='编辑', menu=editmenu)
name_lists = ['剪切', '复制', '粘贴']
for n in name_lists:editmenu.add_command(label=n, command=lambda n=n: select(n))
second_menu = Menu(file_menu)
file_menu.add_cascade(label='嵌入', menu=second_menu)
nn = '嵌入2'
second_menu.add_radiobutton(label=nn, command=lambda n=nn: select(nn))
window.config(menu=menu)if __name__ == '__main__':window.mainloop()

八、Canvas

create_arc:绘制弧。
create_bitmap:绘制位图。
create_image:绘制图片。
create_line():绘制直线。
create_polygon:绘制多边形。
create_text:绘制文字。
create_window:绘制组件。
fill:填充颜色
outline:边框颜色
width:边框高度
style:绘制弧的样式(扇形PIESLICE,弓形CHORX,ARC仅绘制弧)
start:绘制弧的起始高度
extent:绘制弧的角度
arrow:线两端是否有箭头
arrowshape:箭头的形状(长度,箭头长度,箭头宽度)
joinstyle:直接连线风格(METTER,圆角ROUND,BEVEL斜角)
anchor:绘制文字
from tkinter import Tk, Canvas, LEFT, PhotoImagefrom thinker import *window = Tk()
window.title('My Canvas')
window.geometry('500x500')
canvas = Canvas(window, height=500, width=500)
image_file = PhotoImage(file='./canvas.png')
image = canvas.create_image(250, 0, image=image_file, anchor='n')
text = canvas.create_text(100, 60, text='canvas示例:', fill='red', justify=LEFT, font=('Bell MT', 12))
line = canvas.create_line(150, 150, 100, 100, fill='red')
oval = canvas.create_oval(420, 300, 300, 200, fill='yellow')
arc = canvas.create_arc(100, 250, 150, 200, start=0, extent=120, outline='blue')
rect = canvas.create_rectangle(390, 90, 360, 60, outline='green')
canvas.pack()if __name__ == '__main__':window.mainloop()

九、Scale

from_:设置最小值
to:设置最大值
resolution:步距值
orient:HORIZONTAL(设置为水平)
label:绑定标签
tickinterval:设置一个数值,拖动时变成数值的倍数
length:拖动条高度
digits:控制显示数字位数

from tkinter import Tk, Scale, HORIZONTAL, Entry, StringVar, ENDfrom thinker import *window = Tk()
window.title('My Scale')
window.geometry('500x500')
entry = Entry(window, font=('Bell MT', 12))
entry.pack()def show_number(self):entry.delete(0, END)value = scale.get()entry.insert(0, value)var = StringVar()
scale = Scale(window, label='请移动', from_=0, to=100, resolution=10, digits=3, tickinterval=10, orient=HORIZONTAL,command=show_number, length=400)
scale.pack()if __name__ == '__main__':window.mainloop()


http://chatgpt.dhexx.cn/article/f0fXctOK.shtml

相关文章

Thinker 使用详解

文章目录 Tinker基本介绍它主要包含以下几部分:为什么使用 Tinker Tinker 执行原理及流程简单的使用 Tinker1,在项目的gradle.properties 中添加2,在项目的 gradle中添加:3,在 app 中的 gradle 中添加:4,接着进行初始化,新建一个类…

python界面编程-thinker

一、介绍 thinker是python内置界面库不需要额外安装 二、控件使用 1、窗口 import tkintertop tkinter.Tk()#创建窗口 top.mainloop()#消息循环2、按钮 from tkinter import *def button_event():print("按钮按下\n")return#创建窗口 main_window Tk() #设置窗口…

python thinker(菜单,滚动条,回调函数,对话框)

菜单menu from tkinter import * root Tk() def lab():label0Label(root,text"hello world")label0.grid(column0) root.geometry("800x480")#窗口大小menu0Menu(root)#参数是父级控件 for x in [文件,编辑,视图]:menu0.add_command(labelx,commandlab)#…

永恒之蓝(勒索病毒)

1、要有一台靶机和一台攻击机,这里的攻击机为kali,靶机为Windows2008。 2、添加一个新的网卡,防止病毒传播到主机。 1、添加网卡: 注意:这里添加的子网ip不能和前面的重复。 3、给虚拟机设置网卡。 两台虚拟机要设置为…

老生常谈,永恒之蓝-winxp

老生常谈,永恒之蓝-winxp 环境说明: 攻击机:kali 靶机:windows xp sp2 靶机开放服务:无,IE浏览器版本 6.0 信息收集: 扫描当前网段存活主机,发现目标主机:IP&#xf…

msf渗透测试学习-与永恒之蓝漏洞案例

MSF是Metasploit Framework的缩写,是一款广泛使用的渗透测试工具,具有强大的攻击功能。它提供了一个模块化的平台,通过将各种攻击载荷、漏洞利用和辅助工具组装在一起,可用于模拟各种攻击,测试系统安全性,也…

永恒之蓝--Windows7

永恒之蓝是在Windows的SMB服务处理SMB v1请求时发生的漏洞,这个漏洞导致攻击者在目标系统上可以执行任意代码。通过永恒之蓝漏洞会扫描开放445文件共享端口的Windows机器,无需用户任何操作,只要开机上网,不法分子就能在电脑和服务…

win7永恒之蓝

一 使用msfconsole命令开启MSF,并使用search命令搜索永恒之蓝模块 search ms17-010 二 :使用搜索出来的第三个模块来进行探测目标是否存在永恒之蓝漏洞,并设置好以下参数进行扫描测试 >>>use auxiliary/scanner/smb/smb_ms17_010 …

永恒之蓝从渗透的复现

永恒之蓝又称为勒索病毒,同样这个漏洞成为了黑客现在训练的好方式(记住千万不可以攻击别人的电脑),这个漏洞在win7中十分常见,而永恒之蓝对应的是445端口,所以说我们将用win7虚拟机(受害者&…

永恒之蓝(Eternal Blue)复现

永恒之蓝介绍 什么是永恒之蓝 永恒之蓝(Eternal Blue)爆发于2017年4月14日晚,是一种利用Windows系统的SMB协议漏洞来获取系统的最高权限,以此来控制被入侵的计算机。甚至于2017年5月12日, 不法分子通过改造“永恒之蓝…

kali与永恒之蓝

kali永恒之蓝攻击 写在前面一、永恒之蓝是何方神圣?二、神马是SMB协议?三、MSF四、攻击步骤1、攻击主机与靶机配置2、攻击步骤 五、种植后门 写在前面 这是我的第一篇CSDN博客,最近又参加了一个CTF比赛,当然,纯属兴趣爱…

利用虚拟机复现漏洞 “永恒之蓝”

利用虚拟机复现漏洞“永恒之蓝” 攻击:kali Linux 2020.3 靶机:Windows Server 2008 R2 x64 下面详细讲述测试的过程。 —— —— “ 永恒之蓝 ”简介 利用 Windows 系统的 SMB 漏洞可以获取系统最高权限。于 2017 年在全球的范围内大面积爆发&#…

永恒之蓝简介

永恒之蓝是指2017年4月14日晚,黑客团体Shadow Brokers(影子经纪人)公布一大批网络攻击工具,其中包含“永恒之蓝”工具,“永恒之蓝”利用Windows系统的SMB漏洞可以获取系统最高权限。5月12日,不法分子通过改…

永恒之蓝-永恒之蓝漏洞(linux)

扫描存活主机 fping -a -g 192.168.52.1 192.168.56.254 ,因为kali是192.168.52.134,所以win2003是192.168.52.133 像192.168.52.2或者192.168.52.1这种不用管,一般是网关 开启msfconsole 搜索载荷,永恒之蓝的载荷是ms17_010 …

永恒之蓝漏洞复现

一,永恒之蓝 一、漏洞简介\n1、永恒之蓝介绍:\n永恒之蓝漏洞(MS17-010),它的爆发源于 WannaCry 勒索病毒的诞生,该病毒是不法分子利用NSA(National Security Agency,美国国家安全局&#xff09…

永恒之蓝靶场

声明:本文仅限交流学习使用,请勿使用在任何非法商业活动,禁止用于非法用途。否则后果自负。如有侵权,请告知删除,谢谢! 在虚拟机上搭建win7环境(靶机) 攻击者kali2021版: 模拟永恒之蓝攻击过程的话,需要win7(靶机&…

永恒之蓝复现

目录 1.知识点: 2.前提准备 3.复现 1.知识点: (永恒之蓝适应低版本的电脑没有打ms17_010的补丁,现在win7以上的高版本已经不可以使用) 百度百科:永恒之蓝是指2017年4月14日晚,黑客团体Shadow…

永恒之蓝MS17-010漏洞复现

永恒之蓝漏洞复现 永恒之蓝漏洞简介准备工作命令功能查询靶机IP地址Nmap工具Msf框架相关搜索指令如下设置扫描对象扫描对方是否存在445端口开始攻击 设置攻击载荷设置攻击机及靶机攻击成功简单演示攻击结束 永恒之蓝漏洞简介 本次漏洞复现主要展示如何复现一次永恒之蓝漏洞攻击…

kali之永恒之蓝使用流程(操作全套步骤)

第一步需要kali系统的电脑和win7系统电脑的ip的地址在同一网段,互相之间可以ping通。 第二步关闭win7系统的防火墙。 往往失败就是这两部分的错误。 下边开始进入正题。 打开我们的kali系统,永恒之蓝控制版面开启指令 :msfconsole 小马图…

网络攻防——永恒之蓝

永恒之蓝 1.引言2.永恒之蓝定义3.SMB协议3.windows7版本说明4.攻击实例4.1攻击者和被攻击者展示4.2详细攻击过程4.3接下来尝试攻击一下windows10 5.参考文献 1.引言 让一个不爱学习的人整天蒙英语题,听张宇的视频实在是枯燥了点,于是决定看看网安&#x…