GUI英文全称(Graphical User Interface)就是图形用户界面的意思。 python GUI库 TKinter:TKinter模块是Python的标准TkGUI工具包的接口。 其实有点像那个网页一样,就是有按钮,输入框,标签,文本等等组成的。
都会反思活动非诉讼IIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
Python 提供了多个图形开发界面的库,几个常用 Python GUI 库如下:
Tkinter: Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口
.Tk 和 Tkinter 可以在大多数的 Unix 平台下使用,
同样可以应用在 Windows 和 Macintosh 系统里。
Tk8.0 的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。
wxPython:wxPython 是一款开源软件,
是 Python 语言的一套优秀的 GUI 图形库,
允许 Python 程序员很方便的创建完整的、功能健全的 GUI 用户界面。
Jython:Jython 程序可以和 Java 无缝集成。除了一些标准模块,
Jython 使用 Java 的模块。Jython 几乎拥有标准的Python
中不依赖于 C 语言的全部模块。比如,Jython 的用户界面将使用 Swing,AWT或者 SWT。
Jython 可以被动态或静态地编译成 Java 字节码。
我们现在来解决一下我们这个小案例的可能会用到的一些组件 组件属性,以及几何管理。
组件
控件 描述
Button 按钮控件; 在程序中显示按钮。Canvas 画布控件; 显示图形元素如线条或文本Checkbutton 多选框控件;用于在程序中提供多项选择框Entry 输入控件;用于显示简单的文本内容Frame 框架控件;在屏幕上显示一个矩形区域,多用来作为容器 Label 标签控件;可以显示文本和位图Listbox 列表框控件;在Listbox窗口小部件是用来显示一个字符串列表给用户Menubutton 菜单按钮控件,由于显示菜单项。Menu 菜单控件;显示菜单栏,下拉菜单和弹出菜单Message 消息控件;用来显示多行文本,与 label 比较类似Radiobutton 单选按钮控件;显示一个单选的按钮状态Scale 范围控件;显示一个数值刻度,为输出限定范围的数字区间Scrollbar 滚动条控件,当内容超过可视化区域时使用,如列表框。.Text 文本控件;用于显示多行文本Toplevel 容器控件;用来提供一个单独的对话框,和 Frame 比较类似Spinbox 输入控件;与 Entry 类似,但是可以指定输入范围值PanedWindow PanedWindow 是一个窗口布局管理的插件,可以包含一个或者多个子控件。LabelFrame labelframe 是一个简单的容器控件。常用与复杂的窗口布局。tkMessageBox 用于显示你应用程序的消息框。
标准属性
属性 描述
Dimension 控件大小;Color 控件颜色;Font 控件字体;Anchor 锚点;Relief 控件样式;Bitmap 位图;Cursor 光标;
几何管理
几何方法 描述
pack() 包装;grid() 网格;place() 位置;
我们应该如何去创建一个GUI程序呢?不用急, 代码步骤如下:
# 导入使用的GUI模块 Tkinter# 创建GUI的主要应用程序入口# 添加控件并设置相应的属性# 编写触发事件响应代码
接下来 Ken 就来带你撸一把: 导入使用的GUI模块 Tkinter 创建GUI的主要应用程序入口
from tkinter import *root = Tk()root.mainloop()
接下来就是 设置相应的属性
from tkinter import * root = Tk()root['background'] = 'yellow'root['height'] = 330root['width'] = 450root['cursor'] = 'coffee_mug'root.title('我的第一个窗口程序')root.resizable(False,False)root.mainloop()
程序运行之后,就会出现一坨黄黄的(像极了粑粑),你懂的
添加控件
我们为窗口添加一个控件 用于设置提示文本
from tkinter import *root = Tk(className="登绿")label1 = Label(root)label1['text'] = "Hello World"label2 = Label(root)label2['text'] = "志学Python"label1.pack() # label1显示出来label2.pack() # label2显示出来root.mainloop()
程序运行之后就会出现 "Hello World 志学Python"
猜字游戏程序
# -*- coding: utf-8 -*-
import tkinter as tk
import random
number= random.randint(100,999)
num=0
maxnum=999
minnum=100
running=True
def btnCloseClick(event):
root.destroy()
def btnRestartClick(event):
global number
global running
global num
global maxnum
global minnum
number = random.randint(100,999)
running = True
num = 0
labelChange("请输入100到999之间任意整数:")
entry_num.delete(0,'end')
labelRange('目前的范围是[%d,%d]'%(minnum,maxnum))
print(number)
def btnGuessClick(event):
global num
global running
global maxnum
global minnum
if running:
answer = int(entry_num.get())
if answer == number:
labelChange("恭喜答对了!")
num+=1
running = False
numGuess()
elif answer < number:
num+=1
labelChange("小了哦")
if answer>minnum:
minnum=answer
else:
num+=1
labelChange("大了哦")
if answer<maxnum:
maxnum=answer
labelRange('目前的范围是[%d,%d]'%(minnum,maxnum))
else:
labelChange('你已经答对啦.')
def numGuess():
if num == 1:
labelChange('好棒!一次答对!')
elif num < 9:
labelChange('好厉害,尝试次数:'+str(num))
elif num < 19:
labelChange('还行,尝试次数:'+str(num))
else:
labelChange('您都试了超过20次了。。。。尝试次数:'+str(num))
def labelChange(vText):
label_info.config(label_info,text=vText)
def labelRange(cText):
label_range.config(label_range,text=cText)
root = tk.Tk(className="猜数字游戏")
root.geometry("400x150+200+200")
frame1 = tk.Frame(root)
label_info = tk.Label(frame1,width="60")
label_range = tk.Label(frame1,width="20")
label_info.pack()
label_range.pack()
frame1.pack(side = "top",fill = "x")
frame2 = tk.Frame(root)
entry_num = tk.Entry(frame2,width="40")
btnGuess = tk.Button(frame2,text="确定")
entry_num.pack(side = "left")
entry_num.bind('<Return>',btnGuessClick)
btnGuess.bind('<Button-1>',btnGuessClick)
btnGuess.pack(side = "left")
frame2.pack(side = "top",fill = "x")
frame3 = tk.Frame(root)
btnClose = tk.Button(frame3,text="关闭")
btnRestart=tk.Button(frame3,text="重玩")
btnClose.bind('<Button-1>',btnCloseClick)
btnClose.pack(side="left")
btnRestart.bind('<Button-1>',btnRestartClick)
btnRestart.pack()
frame3.pack(side = "top")
labelChange("请输入100到999之间任意整数:")
labelRange('目前的范围是[%d,%d]'%(minnum,maxnum))
entry_num.focus_set()
print(number)
root.mainloop()