如何导入tkinter(Tkinter教程-入门导读)
如何导入tkinter(Tkinter教程-入门导读)Tkinter脑图总结:使用Python开发复杂的桌面应用,不是Python的长处,但是开发一些带界面实用工具,使用Tkinter是不错的选择,完全能够胜任,涵盖GUI开发各方面功能,简单易学容易上手;如果有开发大型的、复杂、漂亮的图形界面的需要,推荐使用PyQt重点说一下TkinterTkinter是Python GUI内置标准库(以上介绍的GUI库大多都是第三方库),Python对Tk GUI库进行了封装,Python集成了Tcl代码,通过内嵌在Python解释器内部的Tcl解释器实现,Tkinter的调用转换成Tcl命令,然后交给Tcl解释器进行解释,实现Python的GUI界面Tkinter特点:
Python GUI
图形用户界面(Graphics User Interface GUI),就是编程开发出客户端图形界面软件,如暴风语音、办公软件、迅雷、QQ、QQ音乐、酷狗音乐等软件
GUI编程属于C/S架构中服务端到客户端,与之相对立的是B/S架构服务端到浏览器端
说一下Python GUI编程,Python支持GUI开发,而且GUI库有很多,如:
- wxPython 一个跨平台的GUI编程库,是Python对跨平台的GUI库wxWidgets的封装
- PyGTk Python对GTk GUI库的封装
- PyQt Python对跨平台的GUI库Qt的封装实现,功能强大,可以用PyQt开发漂亮的界面,跨平台较好,但存在商业授权问题
- PySide 由Nokia提供的对Qt GUI库的另个封装库,成熟度不如PyQt
- Tkinter Python对Tk GUI库进行了封装
重点说一下Tkinter
Tkinter是Python GUI内置标准库(以上介绍的GUI库大多都是第三方库),Python对Tk GUI库进行了封装,Python集成了Tcl代码,通过内嵌在Python解释器内部的Tcl解释器实现,Tkinter的调用转换成Tcl命令,然后交给Tcl解释器进行解释,实现Python的GUI界面
Tkinter特点:
- Tkinter 快速入门、使用简单、构建图形界面简易
- Tkinter 多平台支持
- Python 自带的GUI库、内置标准库,不需下载安装
总结:使用Python开发复杂的桌面应用,不是Python的长处,但是开发一些带界面实用工具,使用Tkinter是不错的选择,完全能够胜任,涵盖GUI开发各方面功能,简单易学容易上手;如果有开发大型的、复杂、漂亮的图形界面的需要,推荐使用PyQt
Tkinter脑图
Tkinter知识脑图
Tkinter入门示例
在网上找的Tkinter代码示例,感觉效果不错,代码结构微调,如下所示:
# -*- coding:utf-8 -*- import Tkinter as Tk from Tkinter import tTk from Tkinter import scrolledtext from Tkinter import Menu from Tkinter import Spinbox from Tkinter import messagebox as mBox class ToolTip(object): """工具菜单栏""" def __init__(self widget): self.widget = widget self.tipwindow = None self.id = None self.x = self.y = 0 def showtip(self text): "Display text in tooltip window" self.text = text if self.tipwindow or not self.text: return x y _cx cy = self.widget.bbox("insert") x = x self.widget.winfo_rootx() 27 y = y cy self.widget.winfo_rooty() 27 self.tipwindow = tw = Tk.Toplevel(self.widget) tw.wm_overrideredirect(1) tw.wm_geometry(" %d %d" % (x y)) label = Tk.Label(tw text=self.text justify=Tk.LEFT background="#ffffe0" relief=Tk.SOLID borderwidth=1 font=("tahoma" "8" "normal")) label.pack(ipadx=1) def hidetip(self): tw = self.tipwindow self.tipwindow = None if tw: tw.destroy() def createToolTip(widget text): toolTip = ToolTip(widget) def enter(event): toolTip.showtip(text) def leave(event): toolTip.hidetip() widget.bind('<Enter>' enter) widget.bind('<Leave>' leave) def init_widgets(mw): style = tTk.Style() # 使用主题样式 style.theme_use('winnative') # 创建页签容器 tabControl = tTk.Notebook(mw) tab1 = tTk.Frame(tabControl) tabControl.add(tab1 text='Tab-1') tab2 = tTk.Frame(tabControl) tabControl.add(tab2 text='Tab-2') tab3 = tTk.Frame(tabControl) tabControl.add(tab3 text='Tab-3') tabControl.pack(expand=1 fill="both") # 实例化Tab-1页签 monty = tTk.LabelFrame(tab1 text='组件区1') monty.grid(column=0 row=0 padx=8 pady=4) tTk.Label(monty text="输入文字:").grid(column=0 row=0 sticky='W') # 添加单行输入文本库 name = Tk.StringVar() nameEntered = tTk.Entry(monty width=12 textvariable=name) nameEntered.grid(column=0 row=1 sticky='W') # 创建按钮 action = tTk.Button(monty text="点击之后\n按钮失效" width=10) action.grid(column=2 row=1 rowspan=2 ipady=7) tTk.Label(monty text="选择学习教程:").grid(column=1 row=0 sticky='W') # 创建下拉列表框 book = Tk.StringVar() bookChosen = tTk.Combobox(monty width=12 textvariable=book) bookChosen['values'] = ('Python教程' 'Java教程' 'C 教程' 'JavaScript教程') bookChosen.grid(column=1 row=1) bookChosen.current(0) bookChosen.config(state='readonly') # 创建整数输入框 spin = Spinbox(monty from_=10 to=25 width=5 bd=8) spin.grid(column=0 row=2) # 创建输入框 spin2 = Spinbox(monty values=('Python3入门' 'C语言' 'C ' 'Java入门' '视觉处理') width=13 bd=3) spin2.grid(column=1 row=2 sticky='W') # 滑动条 scrolW = 30 scrolH = 5 scr = scrolledtext.ScrolledText(monty width=scrolW height=scrolH wrap=Tk.WORD) scr.grid(column=0 row=3 sticky='WE' columnspan=3) # 创建工具菜单 createToolTip(spin '这是一个Spinbox.') createToolTip(spin2 '这是一个Spinbox.') createToolTip(action '这是一个Button.') createToolTip(nameEntered '这是一个Entry.') createToolTip(bookChosen '这是一个Combobox.') createToolTip(scr '这是一个ScrolledText.') # 控制各控件之间的距离 for child in monty.winfo_children(): child.grid_configure(padx=3 pady=1) # 单独控制个别控件之间的距离 action.grid(column=2 row=1 rowspan=2 padx=6) # 实例化Tab-2页签 monty2 = tTk.LabelFrame(tab2 text='组件区2') monty2.grid(column=0 row=0 padx=8 pady=4) # 创建复选框组 chVarDis = Tk.IntVar() check1 = Tk.Checkbutton(monty2 text="安于现状" variable=chVarDis state='disabled') check1.select() check1.grid(column=0 row=0 sticky=Tk.W) chVarUn = Tk.IntVar() check2 = Tk.Checkbutton(monty2 text="积极进取" variable=chVarUn) check2.deselect() check2.grid(column=1 row=0 sticky=Tk.W ) chVarEn = Tk.IntVar() check3 = Tk.Checkbutton(monty2 text="造轮子" variable=chVarEn) check3.deselect() check3.grid(column=2 row=0 sticky=Tk.W) # 单选框列表 values = ["简约思维" "社交元素" "用户参与" "去中心化" "单点突破" "产品第一"] radVar = Tk.IntVar() radVar.set(99) for col in range(4): curRad = Tk.Radiobutton(monty2 text=values[col] variable=radVar value=col) curRad.grid(column=col row=6 sticky=Tk.W columnspan=3) for col in range(4 6): curRad = Tk.Radiobutton(monty2 text=values[col] variable=radVar value=col) curRad.grid(column=col-4 row=7 sticky=Tk.W columnspan=3) style.configure("BW.TLabel" font=("Times" "10" 'bold')) tTk.Label(monty2 text="产品设计要素" style="BW.TLabel").grid(column=2 row=7 columnspan=2 sticky=Tk.EW) labelsFrame = tTk.LabelFrame(monty2 text=' 嵌套区域 ') labelsFrame.grid(column=0 row=8 columnspan=4) tTk.Label(labelsFrame text="在互联网思维下,产品的17项关键要素:").grid(column=0 row=0) tTk.Label(labelsFrame text="极致、专注、体验至上、简约思维、社交元素...").grid(column=0 row=1 sticky=Tk.W) for child in labelsFrame.winfo_children(): child.grid_configure(padx=8 pady=4) # 实例化Tab-3页签 tab3 = Tk.Frame(tab3 bg='#AFEEEE') tab3.pack() for i in range(2): canvas = 'canvas' str(col) canvas = Tk.Canvas(tab3 width=162 height=95 highlightthickness=0 bg='#FFFF00') canvas.grid(row=i column=i) # 创建菜单 menuBar = Menu(mw) mw.config(menu=menuBar) # 添加菜单项 fileMenu = Menu(menuBar tearoff=0) fileMenu.add_command(label="新建") fileMenu.add_separator() fileMenu.add_command(label="退出") menuBar.add_cascade(label="文件" menu=fileMenu) msgMenu = Menu(menuBar tearoff=0) msgMenu.add_command(label="通知 Box") msgMenu.add_command(label="警告 Box") msgMenu.add_command(label="错误 Box") msgMenu.add_separator() msgMenu.add_command(label="判断对话框") menuBar.add_cascade(label="消息框" menu=msgMenu) nameEntered.focus() if __name__ == "__main__": mw = Tk.Tk() mw.title("Tkinter第一个实例") mw.iconbitmap('image/www.tpleina.com.ico') # 禁止改变窗口大小 mw.resizable(0 0) init_widgets(mw) # 运行启动 mw.mainloop()
代码运行效果如下:
tkinter第一个实例