资讯动态

学习如何使用Tkinter包编写一些图形用户界面程序

发布时间:2026/10/26 9:47:24 来源:尧图企业网站定制
本文我们将学习如何使用Tkinter包编写一些图形用户界面程序。Tkinter是Python的一个标准包因此我们并不需要安装它。我们将从创建一个窗口开始然后我们在其之上加入一些小组件比如按钮复选框等并使用它们的一些属性。话不多说让我们开始吧创建一个窗口首先我们导入Tkinter包然后创建一个窗口最后给这个窗口设置标题。from tkinter import * window Tk() window.title(First Window) window.mainloop()结果如下最后一行我们调用了mainloop函数这个函数将让窗口等待用户与之交互直到我们关闭它。如果忘记调用mainloop函数的话将不会向用户显示任何内容没有窗口。添加一个标签组件为了给之前的例子增加一个标签组件我们可以使用Label类lbl Label(window, textHello)我们可以通过grid函数设置其在窗口的位置lbl.grid(column0, row0)完整代码如下所示from tkinter import * window Tk() window.title(First Window) lbl Label(window, textHello) lbl.grid(column0, row0) window.mainloop()结果如下值得注意的是lbl没有调用grid函数的话是不会显示的。设置标签字体大小我们可以使用font参数设置标签字体大小lbl Label(window, textHello, font(Arial Bold, 50))font参数不光可以在标签组件中用其他组件也可以使用呢可是现在窗口貌似太小了连窗口的标题都看不全如何设置窗口大小呢设置窗口大小我们可以用geometry函数来设置窗口大小window.geometry(350x200)以上代码将会把窗口设置成350个像素宽200个像素高。添加一个按钮组件让我们给窗口增加一个按钮组件它的创建和添加方式和标签组件差不多btn Button(window, textClick Me) btn.grid(column1, row0)完整代码如下所示from tkinter import * window Tk() window.title(First Window) window.geometry(350x200) lbl Label(window, textHello) lbl.grid(column0, row0) btn Button(window, textClick Me) btn.grid(column1, row0) window.mainloop()结果如下更改按钮前景和背景颜色我们可以用fg参数设置按钮或其他组件的前景色。我们可以用bg参数设置按钮或其他组件的背景色。btn Button(window, textClick Me, bgorange, fgred)现在如果点击按钮什么都不会发生因为我们没有写处理点击事件的代码。处理按钮点击事件首先我们编写一个当按钮点击后需要执行的函数def clicked(): lbl.configure(textButton was clicked!)然后我们注明一下点击时要调用的函数btn Button(window, textClick Me, commandclicked)完整代码如下所示from tkinter import * window Tk() window.title(First Window) window.geometry(350x200) lbl Label(window, textHello) lbl.grid(column0, row0) def clicked(): lbl.configure(textButton was clicked!) btn Button(window, textClick Me, commandclicked) btn.grid(column1, row0) window.mainloop()当我们点击按钮后结果如下添加一个文本框在之前的例子中我们了解了如何添加一些简单组件现在我们将通过Tkinter的Entry类获取到用户输入。我们可以这样用Entry类创建一个文本框txt Entry(window, width10)然后可以用grid函数像之前那样添加到窗口中。from tkinter import * window Tk() window.title(First Window) window.geometry(350x200) lbl Label(window, textHello) lbl.grid(column0, row0) txt Entry(window, width10) txt.grid(column1, row0) def clicked(): lbl.configure(textButton was clicked!) btn Button(window, textClick Me, commandclicked) btn.grid(column2, row0) window.mainloop()此时点击按钮标签组件内的内容没有变化如何将文本框中输入的信息在标签组件中显示呢我们可以用get函数获取到文本框中输入的信息然后如下更改clicked函数来设置窗口大小def clicked(): res Welcome to txt.get() lbl.configure(textres)如果我们在文本框中输入信息并点击按钮组件标签组件将会显示Welcome to 文本框输入信息。以下是完整代码from tkinter import * window Tk() window.title(First Window) window.geometry(350x200) lbl Label(window, textHello) lbl.grid(column0, row0) txt Entry(window, width10) txt.grid(column1, row0) def clicked(): res Welcome to txt.get() lbl.configure(textres) btn Button(window, textClick Me, commandclicked) btn.grid(column2, row0) window.mainloop()运行结果为但每次我们运行代码后我们都需要通过点击文本框来设置输入焦点才能输入信息有什么办法可以自动设置输入焦点吗设置输入焦点很简单我们只需要调用focus函数来设置窗口大小txt.focus()当我们运行代码后会发现可以直接在文本框中输入信息而不需要点击文本框。添加一个组合框为了添加一个组合框可以使用Combobox类from tkinter.ttk import * combo Combobox(window)然后可以给组合框添加一些值。from tkinter import * from tkinter.ttk import * window Tk() window.title(First Window) window.geometry(350x200) combo Combobox(window) combo[values] (1,2,3,4,5,Text) combo.current(1) combo.grid(column0, row0) window.mainloop()如上所示我们可以用元组设置组合框选项。我们可以通过传递期望被选中选项的索引给current函数用以设置被选中的选项。我们可以通过get函数获取到被选中的选项。combo.get()添加复选框我们可以用Checkbutton类来创建一个复选框组件chk Checkbutton(window, textChoose)能通过传递值设置复选框的状态from tkinter import * from tkinter.ttk import * window Tk() window.title(First Window) window.geometry(350x200) chk_state BooleanVar() chk_state.set(True) # Set check state chk Checkbutton(window, textChoose, varchk_state) chk.grid(column0, row0) window.mainloop()上例我们用的是BooleanVar变量用来设置复选框的状态也可以使用IntVar变量进行设置。chk_state IntVar() chk_state.set(1) # Check chk_state.set(0) # Uncheck结果和用BooleanVar一样。添加单选框添加单选框可以用Radiobutton类创建一个文本框rad1 Radiobutton(window, textFirst, value1)我们需要给每个单选框设置不同的值否则会不起作用。from tkinter import * from tkinter.ttk import * window Tk() window.title(First Window) window.geometry(350x200) rad1 Radiobutton(window, textFirst, value1) rad2 Radiobutton(window, textSecond, value2) rad3 Radiobutton(window, textThird, value3) rad1.grid(column0, row0) rad2.grid(column1, row0) rad3.grid(column2, row0) window.mainloop()当然我们可以给这些单选框设置command参数指定一个函数当用户点击它们时就会运行该函数。rad1 Radiobutton(window, textFirst, value1, commandclicked) def clicked(): # Do what you need pass获取单选框值为获取到选中单选框的值我们可以将IntVar变量传给单选框的variable参数之后用IntVar变量的get函数就可以获取到其值啦from tkinter import * from tkinter.ttk import * window Tk() window.title(First Window) selected IntVar() lbl Label(window, textShow Value) rad1 Radiobutton(window, textFirst, value1, variableselected) rad2 Radiobutton(window, textSecond, value2, variableselected) rad3 Radiobutton(window, textThird, value3, variableselected) def clicked(): lbl.configure(textselected.get()) btn Button(window, textClick Me, commandclicked) rad1.grid(column0, row0) rad2.grid(column1, row0) rad3.grid(column2, row0) btn.grid(column4, row0) lbl.grid(column0, row1) window.mainloop()每次我们选中一个单选框并点击按钮标签框中就会显示其值添加文本区添加文本区可以用ScrolledText类创建一个文本框from tkinter import scrolledtext txt scrolledtext.ScrolledText(window, width40, height10)我们需要指定一个文本区的宽度和高度否则它会占住整个窗口from tkinter import * from tkinter import scrolledtext window Tk() window.title(First Window) window.geometry(350x200) txt scrolledtext.ScrolledText(window, width40, height10) txt.grid(column0, row0) window.mainloop()用以下方法可以在文本区中插入文本txt.insert(INSERT, Text goes here)用以下方法可以将文本区中的文本删除txt.delete(1.0, END)创建消息框我们可以按如下方式创建一个消息框from tkinter import messagebox messagebox.showinfo(Message title, Message content)我们创建一个按钮当它被点击时显示一个消息框from tkinter import * from tkinter import messagebox window Tk() window.title(First Window) window.geometry(350x200) def clicked(): messagebox.showinfo(Message title, Message content) btn Button(window, textClick here, commandclicked) btn.grid(column0, row0) window.mainloop()添加SpinboxSpinbox是输入控件与Entry类似但是可以指定输入范围值。spin Spinbox(window, from_0, to100)通过from_和to参数指定范围也可以用width参数指定控件宽度。from tkinter import * window Tk() window.title(First Window) window.geometry(350x200) spin Spinbox(window, from_0, to100, width5) spin.grid(column0, row0) window.mainloop()也可以指定某些特定的值而不是整个范围from tkinter import * window Tk() window.title(First Window) window.geometry(350x200) spin Spinbox(window, values(3,8,11), width5) spin.grid(column0, row0) window.mainloop()这样Spinbox控件就只会显示3个数字即3811。可以用如下方式给Spinbox控件设置默认值var IntVar() var.set(36) spin Spinbox(window, from_0, to100, width5, textvariablevar)运行代码就可以看到36作为Spinbox控件的默认值显示了。添加进度条我们可以用Progressbar类创建进度条from tkinter.ttk import Progressbar bar Progressbar(window, length200)设置一下进度条的值bar[value] 70改变进度条的颜色可以按如下步骤进行from tkinter import * from tkinter.ttk import Progressbar from tkinter import ttk window Tk() window.title(First Window) window.geometry(350x200) style ttk.Style() style.theme_use(default) style.configure(black.Horizontal.TProgressbar, backgroundblack) bar Progressbar(window, length200, styleblack.Horizontal.TProgressbar) bar[value] 70 bar.grid(column0, row0) window.mainloop()添加文件对话框我们可以按如下方式创建一个文件对话框from tkinter import filedialog file filedialog.askopenfilename()当你选择一个文件并点击打开file变量将会保存该文件的路径。如果想一次选择多个文件并打开我们可以用files filedialog.askopenfilenames()用filetypes参数指定文件对话框的文件类型只需在元组中指定扩展名即可。file filedialog.askopenfilename(filetypes ((Text files,*.txt),(all files,*.*)))askdirectory函数可以让我们请求目录dir filedialog.askdirectory()可以用initialdir参数指定打开的初始目录from tkinter import * from tkinter import filedialog import os window Tk() window.title(First Window) window.geometry(350x200) def clicked(): file filedialog.askopenfilenames(initialdiros.path.dirname(__file__)) btn Button(window, textClick Me, commandclicked) btn.grid(column0, row0) window.mainloop()

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑