Tkinter(一)

341 阅读4分钟

创建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,按字符换行。