Python Thinker GUI组件记录

8 分钟

前言

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

Thinker的布局:

一、Label

Label简单来说就是标签



from tkinter import Label
from tkinter.tix import Tk

from 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, Button

from 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 = True
        var.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, Entry

from 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, StringVar

from 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, Text

from 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, END

from 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, StringVar

from 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开**




from tkinter import Tk, Menu, Label, Entry, END

from 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 = n
    entry.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, PhotoImage

from 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, END

from 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()

~  ~  The   End  ~  ~


 赏 
承蒙厚爱,倍感珍贵,我会继续努力哒!
logo图像
tips
文章二维码 分类标签:开发开发
文章标题:Python Thinker GUI组件记录
文章链接:https://aiwin.fun/index.php/archives/1037/
最后编辑:2024 年 1 月 5 日 20:52 By Aiwin
许可协议: 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)
(*) 3 + 8 =
快来做第一个评论的人吧~