1. 简介
Python的GUI库很多,不同的GUI库适用于不同的场景,不同的需求。本文整理了七个常用的Python GUI库,帮助读者快速了解和选择适合自己的GUI库。
2. tkinter
2.1 简介
Tkinter是Python自带的GUI库,适用于小型的GUI应用程序开发。Tkinter基于Tk GUI工具包,跨平台性良好,易于学习和使用。Tkinter风格简单,但在UI设计上有些局限性。
2.2 示例:
import tkinter as tk
from tkinter import messagebox
def show_message():
messagebox.showinfo("Message", "Hello World!")
root = tk.Tk()
btn = tk.Button(root, text="Click Here", command=show_message)
btn.pack()
root.mainloop()
2.3 备注
Tkinter适合初学者入门,在GUI程序开发过程中可以用于快速搭建界面。
3. PyQt5
3.1 简介
PyQt5是Python中最为流行的GUI库之一,基于Qt GUI开发框架,拥有丰富的控件和功能,跨平台性良好,可用于开发各种规模的GUI程序,但需要C ++认知。
3.2 示例:
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QLabel
class MyWindow(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 300, 300)
self.setWindowTitle('PyQt5 Example')
lbl = QLabel(self)
lbl.setText("Hello World!")
lbl.move(100, 50)
btn = QPushButton(self)
btn.setText("Click Here")
btn.clicked.connect(self.show_message)
btn.move(100, 100)
def show_message(self):
QMessageBox.information(self, "Message", "Hello World!")
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec_())
3.3 备注
PyQt5适合开发高级别的GUI应用,使用Python语言开发的广泛,底层采用C ++实现,开发过程中可结合Qt Designer进行可视化设计,可以大大提高开发效率。
4. wxPython
4.1 简介
wxPython是Python的另一个GUI库,基于C ++的wxWidgets开发框架,支持跨平台开发,使用网格布局和消息事件等。wxPython适合于开发大型的GUI程序,不过API相对较为复杂,学习曲线较陡峭。
4.2 示例:
import wx
class MyFrame(wx.Frame):
def __init__(self, parent, title):
super(MyFrame, self).__init__(parent, title=title, size=(300, 200))
panel = wx.Panel(self)
hbox = wx.BoxSizer(wx.HORIZONTAL)
self.btn1 = wx.Button(panel, label='OK')
self.btn2 = wx.Button(panel, label='Cancel')
hbox.Add(self.btn1, 1, wx.ALL, 10)
hbox.Add(self.btn2, 1, wx.ALL, 10)
vbox = wx.BoxSizer(wx.VERTICAL)
vbox.Add(hbox, 1, wx.EXPAND | wx.ALIGN_CENTER_VERTICAL)
panel.SetSizer(vbox)
self.Centre()
self.Show(True)
if __name__ == '__main__':
app = wx.App()
frame = MyFrame(None, title='wxPython Example')
app.MainLoop()
4.3 备注
wxPython是一个功能强大的GUI库,适合有一定编程经验的开发者,可用于创建各种类型的GUI应用程序。
5. PySide
5.1 简介
PySide是Qt公司推出的Python GUI库,与Qt框架的绑定比PyQt更为紧密,也具有与Qt类似的功能。PySide具有丰富的控件库、自定义样式和贴图、动态效果等,但因为未开源,尚未得到广泛使用。
5.2 示例:
import sys
from PySide2.QtWidgets import QApplication, QMainWindow, QPushButton, QLabel
class MyWindow(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 300, 300)
self.setWindowTitle('PySide Example')
lbl = QLabel(self)
lbl.setText("Hello World!")
lbl.move(100, 50)
btn = QPushButton(self)
btn.setText("Click Here")
btn.clicked.connect(self.show_message)
btn.move(100, 100)
def show_message(self):
QMessageBox.information(self, "Message", "Hello World!")
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec_())
5.3 备注
PySide适合开发商业级的GUI应用,因为它是Qt公司推出的Python库,开发者可在商业应用中使用PySide。
6. Kivy
6.1 简介
Kivy是一个开源的Python GUI库,用于创建跨平台的GUI应用程序,可以在Windows、Linux、Mac OS X、Android等多个平台上运行。Kivy具有简单易用的UI元素、多点触摸和手势支持以及丰富的API和文档,可用于开发高度定制的GUI应用程序。
6.2 示例:
import kivy
kivy.require('1.11.1')
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
class MyWidget(BoxLayout):
def __init__(self, **kwargs):
super(MyWidget, self).__init__(**kwargs)
self.orientation = 'vertical'
self.lbl = Label(text='Hello World!')
self.btn = Button(text='Click Here', on_press=self.show_message)
self.add_widget(self.lbl)
self.add_widget(self.btn)
def show_message(self, instance):
print('Hello World!')
class MyApp(App):
def build(self):
return MyWidget()
if __name__ == '__main__':
MyApp().run()
6.3 备注
Kivy适合开发高度定制的GUI应用程序,因为它内置了丰富的UI元素与效果的API,同时支持多点触摸和手势效果,用户可自行设计GUI应用程序。
7. PyGTK
7.1 简介
PyGTK是Python GTK +绑定的一部分,用于创建Linux GTK GUI应用程序。PyGTK具有跨平台性和典型的C风格API,但不支持GTK 3。
7.2 示例:
import gtk
class PyApp(gtk.Window):
def __init__(self):
super(PyApp, self).__init__()
self.set_title('PyGTK Example')
self.set_default_size(300, 200)
self.set_position(gtk.WIN_POS_CENTER)
btn = gtk.Button("Click Here")
btn.connect("clicked", self.show_message)
self.add(btn)
self.show_all()
def show_message(self, widget):
dialog = gtk.MessageDialog(self, 0, gtk.MESSAGE_INFO, gtk.BUTTONS_OK, "Hello World!")
dialog.run()
dialog.destroy()
PyApp()
gtk.main()
7.3 备注
PyGTK适合Linux平台GUI应用程序开发,也可用于多平台的开发,但是不支持GTK 3版本。
总结
以上七个GUI库各有特色,适用于不同的场景和需求。初学者可选择Tkinter快速入门;有C ++基础的开发者可选择PyQt5或wxPython;希望开发商业级GUI应用程序的开发者则可选择PySide;需要自定义界面实现的开发者可选择Kivy,最后,如果是开发Linux GUI应用程序,可选择PyGTK。