添加按钮小部件

让我们从将按钮添加到窗口开始,按钮的创建和添加到窗口的方式与标签相同:

btn = Button(window, text="Click Me")
btn.grid(column=1, row=0)

所以我们的窗口会是这样的:

from tkinter import *
window = Tk()
window.title("Welcome to onitroad app")
window.geometry('350x200')
lbl = Label(window, text="Hello")
lbl.grid(column=0, row=0)
btn = Button(window, text="Click Me")
btn.grid(column=1, row=0)
window.mainloop()

请注意,我们将按钮放在窗口的第二列 1 上。
如果我们忘记将按钮放在同一列 0 上,它将仅显示该按钮,因为该按钮将位于标签的顶部.

更改按钮前景色和背景色

我们可以使用 fg 属性更改按钮或者任何其他小部件的前景。

此外,我们可以使用 bg 属性更改任何小部件的背景颜色。

btn = Button(window, text="Click Me", bg="orange", fg="red")

处理按钮点击事件

首先,我们将编写按钮被点击时需要执行的函数:

def clicked():
    lbl.configure(text="Button was clicked !!")

然后我们将通过像这样指定函数来将它与按钮连接起来:

btn = Button(window, text="Click Me" , command=clicked)

请注意,我们输入的是不带括号的 clicked ,而不是带括号的 clicked() 。

现在完整的代码将是这样的:

from tkinter import *
window = Tk()
window.title("Welcome to onitroad app")
window.geometry('350x200')
lbl = Label(window, text="Hello")
lbl.grid(column=0, row=0)
def clicked():
    lbl.configure(text="Button was clicked !!")
btn = Button(window, text="Click Me", command=clicked)
btn.grid(column=1, row=0)
window.mainloop()

添加文件对话框(文件和目录选择器)

要创建文件对话框(文件选择器),我们可以像这样使用 filedialog 类:

from tkinter import filedialog
file = filedialog.askopenfilename()

选择文件并单击打开后,文件变量将保存该文件路径。

此外,我们可以请求多个文件,如下所示:

files = filedialog.askopenfilenames()

指定文件类型(过滤文件扩展名)

我们可以使用 filetypes 参数为文件对话框指定文件类型,只需在元组中指定扩展名。

file = filedialog.askopenfilename(filetypes = (("Text files","*.txt"),("all files","*.*")))

我们可以使用 askdirectory 方法请求目录:

dir = filedialog.askdirectory()

我们可以通过指定 initialdir 来指定文件对话框的初始目录,如下所示:

from os import path
file = filedialog.askopenfilename(initialdir= path.dirname(__file__))

添加组合框小部件

要添加组合框小部件,我们可以使用 ttk 库中的 Combobox 类,如下所示:

from tkinter.ttk import *
combo = Combobox(window)

然后我们可以将值添加到组合框。

from tkinter import *
from tkinter.ttk import *
window = Tk()
window.title("Welcome to onitroad app")
window.geometry('350x200')
combo = Combobox(window)
combo['values']= (1, 2, 3, 4, 5, "Text")
combo.current(1) #set the selected item
combo.grid(column=0, row=0)
window.mainloop()

要获取选择项,我们可以像这样使用 get 函数:

combo.get()
Python 使用 Tkinter 包开发图形用户界面GUI

Tkinter 包是一个非常强大的包。
Tkinter 包作为标准包随 Python 提供,因此我们无需安装任何东西即可使用它。

添加单选按钮小部件

要添加单选按钮,只需像这样使用 RadioButton 类:

rad1 = Radiobutton(window,text='First', value=1)

请注意,我们应该为每个单选按钮设置不同的值,否则它们将不起作用。

from tkinter import *
from tkinter.ttk import *
window = Tk()
window.title("Welcome to onitroad app")
window.geometry('350x200')
rad1 = Radiobutton(window,text='First', value=1)
rad2 = Radiobutton(window,text='Second', value=2)
rad3 = Radiobutton(window,text='Third', value=3)
rad1.grid(column=0, row=0)
rad2.grid(column=1, row=0)
rad3.grid(column=2, row=0)
window.mainloop()

此外,我们可以将这些单选按钮中的任何一个的命令设置为特定功能,因此如果用户单击其中任何一个,它就会运行该功能代码。

这是一个例子:

rad1 = Radiobutton(window,text='First', value=1, command=clicked)
def clicked():
# Do what you need

获取单选按钮值(选定的单选按钮)

要获取当前选中的单选按钮或者单选按钮的值,可以将可变参数传递给单选按钮,稍后就可以获取其值。

from tkinter import *
from tkinter.ttk import *
window = Tk()
window.title("Welcome to onitroad app")
selected = IntVar()
rad1 = Radiobutton(window,text='First', value=1, variable=selected)
rad2 = Radiobutton(window,text='Second', value=2, variable=selected)
rad3 = Radiobutton(window,text='Third', value=3, variable=selected)
def clicked():
   print(selected.get())
btn = Button(window, text="Click Me", command=clicked)
rad1.grid(column=0, row=0)
rad2.grid(column=1, row=0)
rad3.grid(column=2, row=0)
btn.grid(column=3, row=0)
window.mainloop()

每次选择单选按钮时,变量的值都会更改为所选单选按钮的值。

添加一个 SpinBox(数字小部件)

要创建 Spinbox 小部件,我们可以像这样使用 Spinbox 类:

spin = Spinbox(window, from_=0, to=100)

在这里,我们创建了一个 Spinbox 小部件,并传递 from_ 和 to 参数来指定 Spinbox 的数字范围。

此外,我们可以使用 width 参数指定小部件的宽度:

spin = Spinbox(window, from_=0, to=100, width=5)

检查完整的示例:

from tkinter import *
window = Tk()
window.title("Welcome to onitroad app")
window.geometry('350x200')
spin = Spinbox(window, from_=0, to=100, width=5)
spin.grid(column=0,row=0)
window.mainloop()

我们可以为 Spinbox 指定数字,而不是像这样使用整个范围:

spin = Spinbox(window, values=(3, 8, 11), width=5)

设置 Spinbox 的默认值

要设置 Spinbox 默认值,我们可以将值传递给 textvariable 参数,如下所示:

var =IntVar()
var.set(36)
spin = Spinbox(window, from_=0, to=100, width=5, textvariable=var)

创建一个消息框

要使用 Tkinter 显示消息框,我们可以像这样使用消息框库:

from tkinter import messagebox
messagebox.showinfo('Message title','Message content')

让我们在用户单击按钮时显示一个消息框。

from tkinter import *
from tkinter import messagebox
window = Tk()
window.title("Welcome to onitroad app")
window.geometry('350x200')
def clicked():
    messagebox.showinfo('Message title', 'Message content')
btn = Button(window,text='Click here', command=clicked)
btn.grid(column=0,row=0)
window.mainloop()

显示警告和错误消息

我们可以以相同的方式显示警告消息或者错误消息。
唯一需要改变的是消息函数

messagebox.showwarning('Message title', 'Message content')  #shows warning message
messagebox.showerror('Message title', 'Message content')    #shows error message

显示提问对话框

要向用户显示 yes no 消息框,我们可以使用以下消息框功能之一:

from tkinter import messagebox
res = messagebox.askquestion('Message title','Message content')
res = messagebox.askyesno('Message title','Message content')
res = messagebox.askyesnocancel('Message title','Message content')
res = messagebox.askokcancel('Message title','Message content')
res = messagebox.askretrycancel('Message title','Message content')

创建标签小部件

为了给我们之前的例子添加一个标签,我们将使用标签类创建一个标签,如下所示:

lbl = Label(window, text="Hello")

然后我们将使用 grid 函数设置它在表单上的位置,并给它这样的位置:

lbl.grid(column=0, row=0)

所以完整的代码会是这样的:

from tkinter import *
window = Tk()
window.title("Welcome to onitroad app")
lbl = Label(window, text="Hello")
lbl.grid(column=0, row=0)
window.mainloop()

不调用标签的grid函数,它不会显示。

设置标签字体大小

你可以设置标签字体,这样你就可以把它放大,也许加粗。
我们还可以更改字体样式。

为此,我们可以像这样传递字体参数:

lbl = Label(window, text="Hello", font=("Arial Bold", 50))

请注意,字体参数可以传递给任何小部件以更改其字体,而不仅仅是标签。

设置窗口大小

我们可以使用geometry函数设置默认窗口大小,如下所示:

window.geometry('350x200')

上面这行将窗口宽度设置为 350 像素,将高度设置为 200 像素。

使用 Entry 类(Tkinter 文本框)获取输入

在前面的 Python GUI 示例中,我们看到了如何添加简单的小部件,现在让我们尝试使用 Tkinter Entry 类(Tkinter 文本框)获取用户输入。

我们可以使用 Tkinter Entry 类创建一个文本框,如下所示:

txt = Entry(window,width=10)

然后我们可以像往常一样使用grid函数将其添加到窗口中

所以我们的窗口会是这样的:

from tkinter import *
window = Tk()
window.title("Welcome to onitroad app")
window.geometry('350x200')
lbl = Label(window, text="Hello")
lbl.grid(column=0, row=0)
txt = Entry(window,width=10)
txt.grid(column=1, row=0)
def clicked():
    lbl.configure(text="Button was clicked !!")
btn = Button(window, text="Click Me", command=clicked)
btn.grid(column=2, row=0)
window.mainloop()

在 Entry 小部件上显示输入的文本:

首先,我们可以使用 get 函数获取条目文本。

def clicked():
    res = "Welcome to " + txt.get()
    lbl.configure(text= res)

这是完整的代码:

from tkinter import *
window = Tk()
window.title("Welcome to onitroad app")
window.geometry('350x200')
lbl = Label(window, text="Hello")
lbl.grid(column=0, row=0)
txt = Entry(window,width=10)
txt.grid(column=1, row=0)
def clicked():
    res = "Welcome to " + txt.get()
    lbl.configure(text= res)
btn = Button(window, text="Click Me", command=clicked)
btn.grid(column=2, row=0)
window.mainloop()

每次运行代码都需要点击entry widget设置焦点才能显示文字

将焦点设置到条目小部件

这非常简单,我们需要做的就是像这样调用 focus 函数:

txt.focus()

禁用条目小部件

要禁用条目小部件,我们可以将状态属性设置为禁用:

txt = Entry(window,width=10, state='disabled')

现在,我们将无法输入任何文本。

为小部件添加间距(填充)

我们可以使用 padx 和 pady 属性为控件添加填充以使其看起来井井有条。

只需将 padx 和 pady 传递给任何小部件并给它们一个值。

lbl1 = Label(tab1, text= 'label1', padx=5, pady=5)

创建第一个 GUI 应用程序

首先,我们将导入 Tkinter 包并创建一个窗口并设置其标题:

from tkinter import *
window = Tk()
window.title("Welcome to onitroad app")
window.mainloop()

最后一行调用 mainloop 函数,该函数调用窗口的无限循环,因此窗口将等待任何用户交互,直到我们关闭它。

如果我们忘记调用 mainloop 函数,则不会向用户显示任何内容。

添加 Checkbutton 小部件(Tkinter 复选框)

要创建一个 checkbutton 小部件,我们可以像这样使用 Checkbutton 类:

chk = Checkbutton(window, text='Choose')

此外,我们可以通过将检查值传递给 Checkbutton 来设置选中状态,如下所示:

from tkinter import *
from tkinter.ttk import *
window = Tk()
window.title("Welcome to onitroad app")
window.geometry('350x200')
chk_state = BooleanVar()
chk_state.set(True) #set check state
chk = Checkbutton(window, text='Choose', var=chk_state)
chk.grid(column=0, row=0)
window.mainloop()

设置 Checkbutton 的检查状态

这里我们创建了一个 BooleanVar 类型的变量,它不是标准的 Python 变量,它是一个 Tkinter 变量,然后我们将它传递给 Checkbutton 类以将检查状态设置为上面示例中突出显示的行。

我们可以将布尔值设置为 false 以取消选中它。

此外,我们可以使用 IntVar 而不是 BooleanVar 并将值设置为 0 或者 1.

chk_state = IntVar()
chk_state.set(0) #uncheck
chk_state.set(1) #check

添加一个 ScrolledText 小部件(Tkinter textarea)

要添加 ScrolledText 小部件,我们可以像这样使用 ScrolledText 类:

from tkinter import scrolledtext
txt = scrolledtext.ScrolledText(window,width=40,height=10)

这里我们指定了 ScrolledText 小部件的宽度和高度,否则它会填满整个窗口。

from tkinter import *
from tkinter import scrolledtext
window = Tk()
window.title("Welcome to onitroad app")
window.geometry('350x200')
txt = scrolledtext.ScrolledText(window,width=40,height=10)
txt.grid(column=0,row=0)
window.mainloop()

设置滚动文本内容

要设置滚动文本内容,我们可以使用插入方法,如下所示:

txt.insert(INSERT,'You text goes here')

删除/清除滚动文本内容

要清除滚动文本小部件的内容,我们可以使用像这样的删除方法:

txt.delete(1.0,END)

添加菜单列

要添加菜单列,我们可以使用如下菜单类:

from tkinter import Menu
menu = Menu(window)
menu.add_command(label='File')
window.config(menu=menu)

首先,我们创建一个菜单,然后添加第一个标签,最后将菜单分配给我们的窗口。

我们可以使用 add_cascade() 函数在任何菜单下添加菜单项,如下所示:

menu.add_cascade(label='File', menu=new_item)

所以我们的代码会是这样的:

from tkinter import *
from tkinter import Menu
window = Tk()
window.title("Welcome to onitroad app")
menu = Menu(window)
new_item = Menu(menu)
new_item.add_command(label='New')
menu.add_cascade(label='File', menu=new_item)
window.config(menu=menu)
window.mainloop()

使用这种方式,我们可以根据需要添加许多菜单项。

from tkinter import *
from tkinter import Menu
window = Tk()
window.title("Welcome to onitroad app")
menu = Menu(window)
new_item = Menu(menu)
new_item.add_command(label='New')
new_item.add_separator()
new_item.add_command(label='Edit')
menu.add_cascade(label='File', menu=new_item)
window.config(menu=menu)
window.mainloop()

在这里,我们添加另一个名为 Edit 的菜单项,带有菜单分隔符。

我们可能会注意到开头有一条虚线,好吧,如果我们单击该线,它将在一个单独的小窗口中显示菜单项。

我们可以通过禁用撕裂功能来禁用此功能,如下所示:

new_item = Menu(menu, tearoff=0)

只需将上面示例中的 new_item 替换为这个,它就不会再显示虚线了。

我不需要提醒我们,我们可以通过指定 command 属性来键入在用户单击任何菜单项时有效的任何代码。

new_item.add_command(label='New', command=clicked)

添加 Notebook 小部件(选项卡控件)

要创建选项卡控件,需要执行 3 个步骤。

  • 首先,我们使用 Notebook 类创建一个选项卡控件
  • 使用 Frame 类创建一个选项卡。
  • 将该选项卡添加到选项卡控件。
  • 打包选项卡控件,使其在窗口中可见。
from tkinter import *
from tkinter import ttk
window = Tk()
window.title("Welcome to onitroad app")
tab_control = ttk.Notebook(window)
tab1 = ttk.Frame(tab_control)
tab_control.add(tab1, text='First')
tab_control.pack(expand=1, fill='both')
window.mainloop()

将小部件添加到选项卡

创建选项卡后,我们可以通过将父属性分配给所需选项卡来将小部件放在这些选项卡中。

from tkinter import *
from tkinter import ttk
window = Tk()
window.title("Welcome to onitroad app")
tab_control = ttk.Notebook(window)
tab1 = ttk.Frame(tab_control)
tab2 = ttk.Frame(tab_control)
tab_control.add(tab1, text='First')
tab_control.add(tab2, text='Second')
lbl1 = Label(tab1, text= 'label1')
lbl1.grid(column=0, row=0)
lbl2 = Label(tab2, text= 'label2')
lbl2.grid(column=0, row=0)
tab_control.pack(expand=1, fill='both')
window.mainloop()

添加进度条小部件

要创建进度条,我们可以像这样使用 progressbar 类:

from tkinter.ttk import Progressbar
bar = Progressbar(window, length=200)

我们可以像这样设置进度条值:

bar['value'] = 70

更改进度条颜色

更改 Progressbar 颜色有点棘手,但超级简单。

首先,我们将创建一个样式并设置背景颜色,最后将创建的样式设置为 Progressbar。

检查以下示例:

from tkinter import *
from tkinter.ttk import Progressbar
from tkinter import ttk
window = Tk()
window.title("Welcome to onitroad app")
window.geometry('350x200')
style = ttk.Style()
style.theme_use('default')
style.configure("black.Horizontal.TProgressbar", background='black')
bar = Progressbar(window, length=200, style='black.Horizontal.TProgressbar')
bar['value'] = 70
bar.grid(column=0, row=0)
window.mainloop()
日期:2020-07-15 11:16:24 来源:oir作者:oir