Tkinter 0 简单实用教程
简单的界面使用Tkinter就足够了,如果想做漂亮的效果,那就用pyqt,pyslide或者wxpython
- python官网,Graphical User Interfaces with Tk
- 小甲鱼对tkinter组件的总结,FishC-tkinter 鱼c笔记
- An Introduction To Tkinter,http://effbot.org/tkinterbook/tkinter-index.htm#class-reference
- Tkinter 8.5 reference: a GUI for Python, http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/index.html
- tkinter模块源代码生成的分析, http://mgltools.scripps.edu/api/DejaVu/Tkinter-module.html
- Python Tkinter Course,https://www.python-course.eu/python_tkinter.php
- [jcodeer]一个挺好的博客,https://blog.csdn.net/jcodeer/article/category/339279/2
- 另一个不错的博客总结,https://www.cnblogs.com/kongzhagen/category/920601.html
- https://www.cnblogs.com/hongten/p/hongten_python_tkinter_rediobutton_menu.html
[TOC]
0 入门 Hello world
最简单的例子
-
导入模块, 查看版本
# p2.x: Tkinter, p3.x: tkinter try: import Tkinter as tk except: import tkinter as tk print(tk.TkVersion)
-
最简单的例子
import tkinter as tk root = tk.Tk() tk.mainloop()
-
实例化
# 1. instantiate tk object # 创建一个主窗口部件,一个程序有且仅有一个主窗口部件,它要先于其他子窗口部件创建 root = tk.Tk() # 2. set up the basic info # 2.1 title # root.wm_title("Hello World, Zhen") root.title("Hello World, Zhen") # 2.2 size and position width = 200 height = 100 screenwidth = root.winfo_screenwidth() screenheight = root.winfo_screenheight() size = '%dx%d+%d+%d' % (width, height, (screenwidth - width) / 2, (screenheight - height) / 2 - 50) root.geometry(size) # 2.3 add some content label1 = tk.Label(root, text = "Hey you~") label1.pack() # 3. run the Event loop 主事件循环 tk.mainloop()
-
OOP
import tkinter as tk import sys class MyGUI(object): def __init__(self, root): self.window = root self.window.protocol("WM_DELETE_WINDOW", self.quit) self._init_gui() def quit(self): self.window.destroy() print("Bye Bye") sys.exit() def _init_gui(self): frame_upper = tk.Frame(self.window) frame_upper.pack(padx=10, pady=10) frame_lower = tk.Frame(self.window) frame_lower.pack(padx=10, pady=10) self.label1 = tk.Label(frame_upper, text="Hello world.....", fg='blue') self.label1.pack(side=tk.LEFT) self.textVar = tk.StringVar() self.textVar.set("Hello ?") self.label2 = tk.Label(frame_upper, textvariable=self.textVar, bg='red', fg='white') self.label2.pack() self.button = tk.Button(frame_lower, text="click me", command=self.change_text) self.switch = True self.button.pack() def change_text(self): if self.switch: self.textVar.set("Go for it!") self.switch = False else: self.textVar.set("Hello?") self.switch = True def change_text(self): if self.switch: self.textVar.set("Go for it!") self.switch = False else: self.textVar.set("Hello?") self.switch = True def center_window(root, width, height): screenwidth = root.winfo_screenwidth() screenheight = root.winfo_screenheight() size = '%dx%d+%d+%d' % (width, height, (screenwidth - width) / 2, (screenheight - height) / 2 - 50) # print(size) root.geometry(size) def limit_window_size(root, vec_max, vec_min): root.maxsize(vec_max[0], vec_max[1]) root.minsize(vec_min[0], vec_min[1]) def test(): root = tk.Tk() root.title("Hello world~") center_window(root, 200, 200) my_gui = MyGUI(root) root.mainloop() if __name__ == "__main__": test()
常用控件
控件名称 | 描述 |
---|---|
Label | 标签控件;可以显示文本和位图 |
Button | 按钮控件;在程序中显示按钮 |
Checkbutton | 多选框控件;用于在程序中提供多项选择 |
RadioButton | 单选框控件;显示一个单选的按钮 |
Scale | 范围控件;显示一个数值刻度,为输出限定范围的数字区间 |
Frame | 框架控件;在屏幕上显示一个矩形区域,多用来作为容器 |
LabelFrame | 容器控件,常用与复杂的窗口布局 |
Entry | 输入控件;用于显示简单的文本内容 |
Scrollbar | 滚动条控件;当内容超过可视化区域时使用,如列表框 |
ListBox | 列表框控件;显示一个字符串列表给用户 |
OptionMenu | Listbox的改版, 添加下拉菜单功能 |
Text | 文本控件;用于显示多行本文 |
Message | 消息控件,用来显示多行文本,与label类似 |
Canvas | 画布控件 |
Menu | 菜单控件;显示菜单栏,下拉菜单和弹出菜单 |
Menubutton | 菜单按钮控件,显示菜单项 |
TopLevel | 容器控件;用来提供一个单独的对话框,和frame类似 |
Spinbox | 输入控件,与entry类似,但可以指定输入范围值 |
PanedWindow | 窗口布局管理插件,可以包含一个或者多个子控件 |
MessageBox | 消息框 |
FileDialog | 文件选择框 |
colorChooser | 颜色选择框 |