目录

GUI图形用户编程(一)

Tkinter的GUI组件结构体

GUI编程的核心步骤

常用的GUI库

核心步骤和第一个GUI程序

tkinter 主窗口

GUI应用程序类的经典写法

tkinter中的Label标签常用属性

Label(标签)

GUI图形用户编程(一)

Tkinter的GUI组件结构体

tkinter和wxpython哪个好 tkinter和pyqt_python

 

GUI编程的核心步骤

常用的GUI库

1.Tkinter

是python的标准GUI库,支持跨平台的GUI程序开发。tkinter适合小型的GUI程序编写,也特别适合初学者学习GUI编程。

2.wxPython

目前表流行,适合大型应用程序开发,功能强于tkinter,整体设计框架类似于MFC(Microsoft Foundation Classes微软基础类库)

3.PyQT

是python编程语言和Qt库的成功融合。Qt库是最强大的库之一。

核心步骤和第一个GUI程序

基于tkinter模块创建GUI程序包含如下4个核心步骤:

1.创建应用程序主窗口对象(也称:根窗口)

(1)通过Tk的无参构造函数。

from tkinter import *

root=Tk()

2.在主窗口中,添加各种可视化组件。比如:按钮(Button)、文本框(Laber)等。

btn01=Button(root)
btn01["text"]="这是一个按钮。"

3.通过几何布局管理器,管理组件的大小和位置

btn01.pack()

4.事件处理

(1)通过绑定事件处理程序,响应用户操作所触发的事件(比如:单击、双击等)

def songhua(e)
	messagebox.showinfo("Message","送你一朵花")
	print("送你99朵花!")
btn01.bind("<Button-1>",songhua)

5.第一个GUI程序

from tkinter import *
from tkinter import messagebox
root = Tk()
root.title("the one")   # 显示程序名称
root.geometry("500x300+100+200")

btn01 = Button(root)
btn01["text"] = "点我就送花"
btn01.pack()
bntQuit = Button(text="退出", command=root.destroy)
bntQuit.pack()


def songhua(e):  # e:事件对象
    messagebox.showinfo("Message", "送你一朵玫瑰花")
    print("送你99朵玫瑰花")


btn01.bind("<Button-1>", songhua)


root.mainloop()      # 调用组件的mainloop()方法,进入事件循环

tkinter 主窗口

主窗口位置和大小

通过geometry(‘wxh±x±y’)进行设置,w为宽度,h为高度,+x表示距屏幕左边的距离;-x表示距屏幕右边的距离;+y表示距屏幕上边的距离;-y表示距屏幕下边的距离。

from tkinter import *
root = Tk()
root.geometry("400x100+200+300")

GUI应用程序类的经典写法

采用面向对象的方法,可更加合理的组织代码。

通过Application组织整个GUI程序,类Application继承了Frame及通过继承拥有了父类的特性。通过构造函数——init——()初始化窗口中的对象,通过createWidgets()方法创建窗口中的对象。

Frame框架是一个tkinter组件,表示一个矩形的区域。Frame一般作为容器使用,从而实现复杂的布局。

from tkinter import *
from tkinter import messagebox


class Application(Frame):
    """一个经典的GUI程序类的写法"""

    def __init__(self, master=None):
        super().__init__(master)         # super()代表的是父类的定义,而不是父类对象
        self.master = master
        self.pack()
        self.createWidget()

    def createWidget(self):
        """创建组件"""
        self.bnt01 = Button(self)
        self.bnt01["text"] = "点击送花"
        self.bnt01.pack()
        self.bnt01["command"] = self.songhua

        # 创建一个退出按钮
        self.bntQuit = Button(self, text="退出", command=root.destroy)
        self.bntQuit.pack()

    def songhua(self):
        messagebox.showinfo("送花", "送你99朵玫瑰花")


if __name__ == "__main__":
    root = Tk()
    root.geometry("400x100+200+300")
    root.title("一个经典的GUI程序类的测试")
    app = Application(master=root)
    root.mainloop()

tkinter中的Label标签常用属性

Label(标签)

主要用于显示文本信息,也可以显示图像

1.width,height:

用于指定区域大小,如果显示是文本,则以单个英文字符大小为单位(一个汉字占两个字符位置);如果显示是图像,则以像素为单位。默认值是根据具体显示的内容动态调整。

2.font

指定字体和字体大小,如:font=(font—name,size)

3.image

显示在Label上的图像,目前tkinter只支持gif格式。

4.fg和bg

fg(foreground):前景色、bg(background):背景色

5.justify

针对多行文字的对齐,可设置justify属性,可选值“left” “center” or

“right”

代码演示:

from tkinter import *
# from tkinter import messagebox


class Application(Frame):
    """一个经典的GUI程序类的写法"""

    def __init__(self, master=None):
        super().__init__(master)         # super()代表的是父类的定义,而不是父类对象
        self.master = master
        self.pack()
        self.createWidget()

    def createWidget(self):
        """创建组件"""
        self.lable01 = Label(self, text="python程序", width=10, height=2, bg="black", fg="white")
        self.lable01.pack()
        self.lable02 = Label(self, text="新年快乐", width=10, height=2, bg="blue", fg="white", font=("黑体", 30))
        self.lable02.pack()
        # 显示图像
        global photo    # 需将其声明为全局变量,若是局部变量,本方法执行完毕后,图像对象销毁,将不显示图像
        photo = PhotoImage(file="图像/img.gif")
        self.lable03 = Label(self, image=photo)
        self.lable03.pack()
        self.lable04 = Label(self, text="山寺日高人未起\n。。。", borderwidth=1, relief="solid", justify="right")
        self.lable04.pack()


if __name__ == "__main__":
    root = Tk()
    root.geometry("600x700+200+300")
    app = Application(master=root)
    root.mainloop()