创建GUI Form, 并且添加Widgets
创建第一个Python GUI
# -*- coding:utf-8 -*-
import tkinter as tk
win = tk.Tk()
win.title("Python GUI")
win.mainloop()
避免Gui大小被改变
# -*- coding:utf-8 -*-
import tkinter as tk
win = tk.Tk()
win.title("Python GUI")
win.resizable(0, 0) # 固定大小
win.mainloop()
当Resizable()被传递(0, 0)时,可以固定大小。但是传入其他值时,作为窗口初始化大小,但是无法固定。
添加label
# -*- coding:utf-8 -*-
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()
不包含widget时,tkinter使用默认大小。当包含widget时,会自动优化,界面足够显示窗口部件即可。
创建按钮, 改变其text属性
# -*- coding:utf-8 -*-
import tkinter as tk
from tkinter import ttk
win = tk.Tk()
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")
action = ttk.Button(win, text="Click Me!", command=clickMe)
action.grid(column=1, row=0)
win.mainloop()
点击前:
点击后:
Text box widgets
# -*- coding:utf-8 -*-
import tkinter as tk
from tkinter import ttk
win = tk.Tk()
win.title("Python GUI")
def clickMe():
action.configure(text='Hello ' + name.get())
aLabel = ttk.Label(win, text="Enter a name:")
aLabel.grid(column=0, row=0)
action = ttk.Button(win, text="Click Me!")
action.grid(column=1, row=1)
name = tk.StringVar()
nameEntered = ttk.Entry(win, width=12, textvariable=name)
nameEntered.grid(column=0, row=1)
win.mainloop()
点击前:
点击后:
设置widget焦点, 并且使其失效
# -*- coding:utf-8 -*-
import tkinter as tk
from tkinter import ttk
win = tk.Tk()
win.title("Python GUI")
def clickMe():
action.configure(text='Hello ' + name.get())
aLabel = ttk.Label(win, text="Enter a name:")
aLabel.grid(column=0, row=0)
action = ttk.Button(win, text="Click Me!", command=clickMe)
action.grid(column=1, row=1)
name = tk.StringVar()
nameEntered = ttk.Entry(win, width=12, textvariable=name)
nameEntered.grid(column=0, row=1)
nameEntered.focus()
action.configure(state="disabled")
win.mainloop()
Combo box widgets
# -*- coding:utf-8 -*-
import tkinter as tk
from tkinter import ttk
win = tk.Tk()
win.title("Python GUI")
aLabel = ttk.Label(win, text="Enter a name:")
aLabel.grid(column=0, row=0)
bLabel = ttk.Label(win, text="Choose a number:")
bLabel.grid(column=1, row=0)
text = tk.StringVar()
atext = ttk.Entry(win, width=12, textvariable=text)
atext.grid(column=0, row=1)
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)
def clickMe():
action.configure(text="Hello " + text.get() + " " +
numberChosen.get())
action = ttk.Button(win, text="clicked me", command=clickMe)
action.grid(column=2, row=1)
win.mainloop()
check button
# -*- coding:utf-8 -*-
import tkinter as tk
from tkinter import ttk
win = tk.Tk()
win.title("Python GUI")
aLabel = ttk.Label(win, text="Enter a name:")
aLabel.grid(column=0, row=0)
bLabel = ttk.Label(win, text="Choose a number:")
bLabel.grid(column=1, row=0)
text = tk.StringVar()
atext = ttk.Entry(win, width=12, textvariable=text)
atext.grid(column=0, row=1)
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)
def clickMe():
action.configure(text="Hello " + text.get() + " " +
numberChosen.get())
action = ttk.Button(win, text="clicked me", command=clickMe)
action.grid(column=2, row=1)
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)
win.mainloop()
默认情况下,0(unchecked)或者1(checked)是一个tkinter integer类型的。
tk.W意味着widget沿着grid向西对齐。当我们放大GUI,widget将保持在左边,不会移动到GUI中间。
# -*- coding:utf-8 -*-
import tkinter as tk
from tkinter import ttk
win = tk.Tk()
win.title("Python GUI")
aLabel = ttk.Label(win, text="Enter a name:")
aLabel.grid(column=0, row=0)
bLabel = ttk.Label(win, text="Choose a number:")
bLabel.grid(column=1, row=0)
text = tk.StringVar()
atext = ttk.Entry(win, width=12, textvariable=text)
atext.grid(column=0, row=1)
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)
def clickMe():
action.configure(text="Hello " + text.get() + " " +
numberChosen.get())
action = ttk.Button(win, text="clicked me", command=clickMe)
action.grid(column=2, row=1)
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)
COLOR1 = "Blue"
COLOR2 = "Gold"
COLOR3 = "Red"
radVar = tk.IntVar()
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)
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)
win.mainloop()
scrolled text widgets
# -*- coding:utf-8 -*-
import tkinter as tk
from tkinter import ttk, scrolledtext
win = tk.Tk()
win.title("Python GUI")
aLabel = ttk.Label(win, text="Enter a name:")
aLabel.grid(column=0, row=0)
bLabel = ttk.Label(win, text="Choose a number:")
bLabel.grid(column=1, row=0)
text = tk.StringVar()
atext = ttk.Entry(win, width=12, textvariable=text)
atext.grid(column=0, row=1)
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)
def clickMe():
action.configure(text="Hello " + text.get() + " " +
numberChosen.get())
action = ttk.Button(win, text="clicked me", command=clickMe)
action.grid(column=2, row=1)
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)
COLOR1 = "Blue"
COLOR2 = "Gold"
COLOR3 = "Red"
radVar = tk.IntVar()
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)
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)
scrolW = 30
scrolH = 3
scr = scrolledtext.ScrolledText(win, width=scrolW, height=scrolH, wrap=tk.WORD)
scr.grid(column=0, row=6, columnspan=3)
win.mainloop()
tk.WROD表示到末尾时按单词换行,默认时tk.CHAR,按字符换行。