Day 24 : Tkinter-利用Python建立GUI(元件篇)

今天会开始来讲元件的部分~

通用参数

  • height : 高度
  • width : 宽度
  • fg : 文字颜色
  • bg : 背景颜色
  • command : 指令,利用对应的自定义函式让物件动作时执行某些动作(无法在Entry等特定元件中使用)。例如以下例子:
import tkinter as tk

def plus():
    print("你点击了按钮")

window = tk.Tk()
window.title('GUI')
window.geometry('380x400')
window.resizable(False, False)
window.iconbitmap('icon.ico')

test = tk.Button(text="这是Button",command=plus)
test.pack()
window.mainloop()

https://ithelp.ithome.com.tw/upload/images/20211007/20138060GgGKViC44q.png
可以看到,点击按钮後会执行前面定义的函式plus(),在cmd显示"你点击了按钮"。

这些是比较基本的通用参数,基本上所有元件都可适用。

button

button这个元件就是按钮,比较重要的参数就是text,用来显示按钮内的文字。

import tkinter as tk

window = tk.Tk()
window.title('GUI')
window.geometry('380x400')
window.resizable(False, False)
window.iconbitmap('icon.ico')

test = tk.Button(text="这是Button",bg="yellow")
test.place(x=0,y=0)
window.mainloop()

https://ithelp.ithome.com.tw/upload/images/20211007/2013806005AFTuq86v.png

Entry

Entry用来呈现让使用者输入文字的视窗,利用show()函式可以将输入的文字转成指定的文字,像是这样:

test = tk.Entry(show="*")
test.pack()

https://ithelp.ithome.com.tw/upload/images/20211007/20138060rjoyChEjQK.png
我们使用get()这个函式来取得使用者输入的资讯,使程序可以根据使用者输入的文字来做出不同的回应:

import tkinter as tk

def show():
    password=test.get()
    print(password)

window = tk.Tk()
window.title('GUI')
window.geometry('380x400')
window.resizable(False, False)
window.iconbitmap('icon.ico')

test = tk.Entry(show="*")
test.pack()
testButton = tk.Button(text="show",command=show)
testButton.pack()
window.mainloop()

https://ithelp.ithome.com.tw/upload/images/20211007/20138060YMek1Bb9fD.png
可以看到我将按钮的command设定到了show()这个函式,并且用get()取得输入框的文字并且显示在cmd上。

Checkbutton

这个元件在状态上只有勾选以及未勾选的状况,也就是1跟0,在状态判别非常简单。

常使用到的参数有下面这两个:

  • state : 勾选框的状态,可以选择normal(预设启用)或是disabled(禁用)
  • text : 显示Checkbutton旁边的文字
test = tk.Checkbutton(text="这是启用的勾选框",state="normal")
test.pack()
test2 = tk.Checkbutton(text="这是禁用的勾选框",state="disabled")
test2.pack()

https://ithelp.ithome.com.tw/upload/images/20211007/20138060Wp52xDnvX8.png
可以看到下面的勾选框无法点击,上面的可以点击,一样可以使用get()来取得当前状态(勾选为1,未勾选为0),进而达到一些功能。

Radiobutton

这个元件就是常见的按圆形按纽,通常不能复选。

若要一组Radiobutton,我们必须把它们编到一组,才会在点击不同按钮时切换选项。

radioVar = tk.IntVar()
radio1 = tk.Radiobutton(text='Button1',variable=radioVar, value=1) 
radio2 = tk.Radiobutton(text='Button2',variable=radioVar, value=2) 
radio3 = tk.Radiobutton(text='Button3',variable=radioVar, value=3)

radio1.place(x=40,y=25)
radio2.place(x=140,y=25)
radio3.place(x=240,y=25)

用tk.IntVar()函式,并在不同Radiobutton中的参数variable中放入一样的组别名称,然後设定选取时的value为多少:
https://ithelp.ithome.com.tw/upload/images/20211007/20138060b2Un0ZLmxp.png
https://ithelp.ithome.com.tw/upload/images/20211007/201380600Yruj8wrVL.png

Label

Label就是标签(讲废话),可以想像成是一个空的盒子,可以放入你想要的东西。通常我都使用image函式来塞图片,先用tk.PhotoImage()这个功能选取图片後,再丢到Label中:

img =tk.PhotoImage(file='01.png')
test = tk.Label(image=img)
test.pack()
window.mainloop()

https://ithelp.ithome.com.tw/upload/images/20211007/20138060qvYehxNatE.png

Menu

这个就是我们常常在程序上方可以看到的开启档案阿,储存等等的那一排。

window = tk.Tk()
window.title('GUI')
window.geometry('380x400')
window.resizable(False, False)
window.iconbitmap('icon.ico')

menu = tk.Menu(window)
window.config(menu=menu)
menu.add_command(label='开启')

window.mainloop()

用tk.Menu可以建立一层的menu,再利用add_command()来创建元素:
https://ithelp.ithome.com.tw/upload/images/20211007/20138060xUtd6UL0dg.png
如果想要按下menu後可以跳出更多选项的话,我们需要建立第二层menu:

menu = tk.Menu(window)
window.config(menu=menu)
menu2 = tk.Menu(menu)
menu2.add_command(label='开启')
menu2.add_command(label='储存')
menu2.add_command(label='另存')
menu.add_cascade(label='功能',menu=menu2)

先建立第一层menu,将menu2这个变数(第二层menu)绑在menu(第一层menu)下,并且建立三个menu2的元件,再用add_cascade()这个功能将第一层menu建立出来然後把menu2的东西绑进去。(好麻烦
https://ithelp.ithome.com.tw/upload/images/20211007/20138060jQFzzCokhM.png
虚线可以将tearoff参数设置为0来让它消失。

menu2 = tk.Menu(menu,tearoff=0) #这行改成这样

https://ithelp.ithome.com.tw/upload/images/20211007/20138060GWvWZV46eG.png

其实还有满多元件的,想了解更多的可以来这个网站看:https://www.tutorialspoint.com/python/python_gui_programming.htm

明天直接来实际做一个有用(?)的小程序出来好了,实作才是进步的最大核心!


<<:  【Day 24】半监督式学习(Semi-supervised Learning)(上)

>>:  Day25 UDP Swift小实作3!

Day06:Forward Message To Server(转发讯息到 Server 端)

全文同步於个人 Docusaurus Blog 前一章印出使用者名称和讯息内容後,接下来要尝试将其...

OpenStack Neutron 介绍 2

本系列文章同步发布於笔者网站 上一篇介绍了 Neutron 的架构,接下来两篇将会接续介绍 Neut...

从 JavaScript 角度学 Python(8) - BMI 计算(1)

前言 接下来这一篇算是收割前面几个章节的章节小练习,基本上我是尽量规划每过几个章节就有一些小作业、小...

selenium爬虫:使用xpath

from selenium import webdriver import openpyxl imp...

#5 Types of CSS Selector

After the previous 2 articles of CSS basic introdu...