
上面的各种按钮、菜单、编辑区械等都是一个个组件,它们都放置到窗口中,并通过增加“对事件的处理”成为一个完整的程序。
常用的GUI库
1.tkinter (Tk interface)是 Python的标准GUI库,支持跨平台的GUI程序开发。tkinter适合小型的GUI程序编写,也特别适合初学者学习GUI编程。
2. wxPython
wxPython是比较流行的GUI库,适合大型应用程序开发,功能强于tkinter ,整体设计框架类似于MFC(MicrosoftFoundation Classes 微软基础类库)。
3. PyQT
t是一种开源的GUI库,适合大型 GUI程序开发,PyQT是Qt工具包标准的Python实现。我们也可以使用QtDesginer界面设计器快速开发GUI应用程序。
创建简单的GUI
1.创建应用程序主窗口对象
2.在主窗口中,添加各种可视化组件,比如:按钮,文本框
3.通过布局管理器,管理组件的大小和位置
4.事件处理
(1)通过绑定事件的处理程序,实现动态化
#coding:gbk
from tkinter import *
from tkinter import messagebox
root =Tk()
btn01=Button(root)
btn01["text"]="点我"
btn01.pack()
def songhua(e):#e就是事件的对象
messagebox.showinfo("Message","送你一朵花")
print("送你一朵小红花")
btn01.bind("<Button-1>",songhua)
root.mainloop() #调用组件的mainloop()方法,进入事件循环
tkinter主窗口
通过geometry(‘wxh±x±y’)进行设置,w为宽度, h为高度。+X表示距屏幕左边的距离; -表示距屏幕右边的距离;+y表示距屏幕上边的距离; -y表示距屏幕下边的距离。
#coding:gbk
from tkinter import *
from tkinter import messagebox
root =Tk()
root.title("我的第一个GUI")
root.geometry("500x300+100+200")#横500,竖300,
btn01=Button(root)
btn01["text"]="点我"
btn01.pack()
def songhua(e):#e就是事件的对象
messagebox.showinfo("Message","送你一朵花")
print("送你一朵小红花")
btn01.bind("<Button-1>",songhua)
root.mainloop() #调用组件的mainloop()方法,进入事件循环
常用组件
GUI采用面向对象
#coding:gbk
from tkinter import *
from tkinter import messagebox
class Application(Frame):
""""一个经典的GUI程序类的写法"""
def __init__(self,master=None):
super().__init__(master)
self.master=master
self.pack()
self.createWidget()
def createWidget(self):
"""创建组件"""
self.btn01=Button(self)
self.btn01["text"]="点击送花"
self.btn01.pack()
self.btn01["command"]=self.songhua
# 创建一个退出按钮
self.btnQuit=Button(self,text="退出",command=root.destroy)
self.btnQuit.pack()
def songhua(self):
messagebox.showinfo("送花","送你一朵小红花")
root=Tk()
root.geometry("400x100+200+300")
root.title("一个经典的GUI")
app=Application(master=root)
root.mainloop()
Label标签
label主要用于显示文本信息,也可以显示图像
#coding:gbk
from tkinter import *
class Application(Frame):
""""一个经典的GUI程序类的写法"""
def __init__(self,master=None):
super().__init__(master)
self.master=master
self.pack()
self.createWidget()
def createWidget(self):
self.label01=Label(self,text="jxlg",width=10,height=2,bg="black",fg="white")
self.label01.pack()
self.label02=Label(self,text="ssl",width=10,height=2,bg="black",fg="white",font=("黑体",30))
self.label02.pack()
root=Tk()
root.geometry("400x100+200+300")
root.title("第二个GUI")
app=Application(master=root)
root.mainloop()
Options选项
Button
用来执行用户的单机操作
#coding:gbk
from tkinter import *
from tkinter import messagebox
class Application(Frame):
""""一个经典的GUI程序类的写法"""
def __init__(self,master=None):
super().__init__(master)
self.master=master
self.pack()
self.createWidget()
def createWidget(self):
self.btn01=Button(root,text="登录",command=self.login)
self.btn01.pack()
global photo
photo=PhotoImage(file="D:\桌面\Python\project01\GUI\pikaqiu.gif")
self.btn02=Button(root,image=photo,command=self.login)
self.btn02.pack()
def login(self):
messagebox.showinfo("jxlg","ssl")
if __name__=='__main__':
root=Tk()
root.geometry("400x100+200+300")
root.title("第二个GUI")
app=Application(master=root)
root.mainloop()
Entry单行文本框
Entry 用来接收一行字符串的控件。如果用户输入的文字长度长于Entry控件的宽度时,文字会自动向后滚动。如果想输入多行文本,需要使用Text控件。
#coding:gbk
from tkinter import *
from tkinter import messagebox
class Application(Frame):
""""一个经典的GUI程序类的写法"""
def __init__(self,master=None):
super().__init__(master)
self.master=master
self.pack()
self.createWidget()
def createWidget(self):
"""创建登录界面的组件"""
self.label01=Label(self,text="用户名")
self.label01.pack()
# StringVar变量,绑定到指定的组件
# StringVar 变量的值发生变化,组件内容也发生变化
v1=StringVar()
self.entry01=Entry(self,textvariable=v1)
self.entry01.pack()
v1.set("admin")
print(v1.get());print(self.entry01.get())
#创建密码框
self.label02 = Label(self, text="密码")
self.label02.pack()
v2=StringVar()
self.entry02=Entry(self,textvariable=v2,show="*")
self.entry02.pack()
self.btn01=Button(self,text="登录",command=self.login)
self.btn01.pack()
def login(self):
username=self.entry01.get()
pwd=self.entry02.get()
print("去数据库比对用户名和密码")
print("用户名:"+username)
print("密码:"+p)
if username=="ssl" and p=="123456":
messagebox.showinfo("jxlg","密码正确,登录成功")
else:
messagebox.showinfo("jxlg","密码错误,登录失败")
if __name__=='__main__':
root=Tk()
root.geometry("400x200+200+300")
app=Application(master=root)
root.mainloop()
Text多行文本框
Text(多行文本框)的主要用于显示多行文本,还可以显示网页链接,图片,HTML页面,甚至CSS样式表,添加组件等。因此,也常被当做简单的文本处理器、文本编辑器或者网页浏览器来使用。比如IDLE就是Text 组件构成的。