wxpython学习笔记(推荐查看)
一、简介
wxPython是Python编程语言的一个GUI工具箱。他使得Python程序员能够轻松的创建具有健壮、功能强大的图形用户界面的程序。它是Python语言对流行的wxWidgets跨平台GUI工具库的绑定。而wxWidgets是用C++语言写成的。和Python语言与wxWidgets GUI工具库一样,wxPython是开源软件。这意味着任何人都可以免费地使用它并且可以查看和修改它的源代码,或者贡献补丁,增加功能。wxPython是跨平台的。这意味着同一个程序可以不经修改地在多种平台上运行。现今支持的平台有:32位微软Windows操作系统、大多数Unix或类Unix系统、苹果Mac OS X。由于使用Python作为编程语言,wxPython编写简单、易于理解。
二、基本使用
基本使用的话到这个地址看已经很详细了,我没有必要重复一遍啦:
http://wiki.wxpython.org/Getting%20Started
三、常用控件
1. 菜单(menu)
http://wiki.wxpython.org/Getting%20Started#head-33e6dc36df2a89db146142e9a97b6e36b956875f
2. 页面布局(Sizer)
这个东东使用起来比较麻烦,参考以下页面吧:
http://wiki.wxpython.org/Getting%20Started#head-7455553d71be4fad208480dffd53b7c68da1a982
wxPython frame的布局详细解释(一)
wxPython frame的布局详细解释(二)
3. Tab页面(notebook)
http://wiki.wxpython.org/Getting%20Started#head-b20d2fc488722cdb3f6193150293d1e118734db8
4. 列表控件(ListCtrl)
这个控件比较强大,是我比较喜欢使用的控件之一。在《wxPythonInAction》一书中第13章有介绍(想要该书电子版及附带源码的朋友可以问我要)
下面是list_report.py中提供的简单用法:
代码如下:
import wx
import sys, glob, random
import data
class DemoFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1,
"wx.ListCtrl in wx.LC_REPORT mode",
size=(600,400))
il = wx.ImageList(16,16, True)
for name in glob.glob("smicon??.png"):
bmp = wx.Bitmap(name, wx.BITMAP_TYPE_PNG)
il_max = il.Add(bmp)
self.list = wx.ListCtrl(self, -1, style=wx.LC_REPORT)
self.list.AssignImageList(il, wx.IMAGE_LIST_SMALL)
# Add some columns
for col, text in enumerate(data.columns):
self.list.InsertColumn(col, text)
# add the rows
for item in data.rows:
index = self.list.InsertStringItem(sys.maxint, item[0])
for col, text in enumerate(item[1:]):
self.list.SetStringItem(index, col+1, text)
# give each item a random image
img = random.randint(0, il_max)
self.list.SetItemImage(index, img, img)
# set the width of the columns in various ways
self.list.SetColumnWidth(0, 120)
self.list.SetColumnWidth(1, wx.LIST_AUTOSIZE)
self.list.SetColumnWidth(2, wx.LIST_AUTOSIZE)
self.list.SetColumnWidth(3, wx.LIST_AUTOSIZE_USEHEADER)
app = wx.PySimpleApp()
frame = DemoFrame()
frame.Show()
app.MainLoop()
对于ListCtrl控件,我要补充的几个地方是:
1. 如何获取选中的项目?
最常用的方法就是获取选中的第一项:GetFirstSelected(),这个函数返回一个int,即ListCtrl中的项(Item)的ID。
还有一个方法是:GetNextSelected(itemid),获取指定的itemid之后的第一个被选中的项,同样也是返回itemid。
通过这两个方法,我们就可以遍历所有选中的项了:
代码如下:
GetNextSelecteditemid = self.list.GetFirstSelected()
while itemid -1:
#Do something
itemid = self.list.GetNextSelected(itemid)
如果要获取某一行,某一列的值,则通过下面的方法:
代码如下:
#获取第0行,第1列的值
itemtext = self.list.GetItem(0, 1).Text
2. 如何在选定项后添加右键菜单?
在__init__函数中,添加如下的事件绑定:
self.list.Bind(wx.EVT_CONTEXT_MENU, self.OnContextMenu)然后,添加OnContextMenu方法:
代码如下:
def OnContextMenu(self, event):
if not hasattr(self, "popupStop"):
self.popupStop = wx.NewId()
self.popupPropery = wx.NewId()
self.Bind(wx.EVT_MENU, self.OnPopupStop, id = self.popupStop)
self.Bind(wx.EVT_MENU, self.OnPopupProperty, id = self.popupPropery)
# 创建菜单
menu = wx.Menu()
itemStop = wx.MenuItem(menu, self.popupStop, "Stop")
itemProperty = wx.MenuItem(menu, self.popupPropery, 'Property')
menu.AppendItem(itemStop)
menu.AppendItem(itemProperty)
itemProperty.Enable(False)#默认让属性按钮变成无效状态
if itemid == -1:#如果没有选中任何项
itemStop.Enable(False)
else:
itemStop.Enable(False)
itemProperty.Enable(True)
#到这里才弹出菜单
self.PopupMenu(menu)
#最后注意销毁前面创建的菜单
menu.Destroy()
5. 选择文件对话框(FileDialog)
使用起来非常简单:
代码如下:
dlg = wx.FileDialog(self,
message="Yes, select a place ",
wildcard="PNG(*.png)|*.png" ,
style=wx.SAVE
)
savefile = ''
if dlg.ShowModal() == wx.ID_OK:
savefile = dlg.GetPath()
try:
os.remove(self.filename)
except:
pass
self.img.SaveFile(savefile, wx.BITMAP_TYPE_PNG)
self.filename = savefile
dlg.Destroy()
6. 选择文件夹对话框(DirDialog)
代码如下:
dialog = wx.DirDialog(None, 'Choose a directory: ',
style = wx.DD_DEFAULT_STYLE | wx.DD_NEW_DIR_BUTTON)
if dialog.ShowModal() == wx.ID_OK:
for itemid in range(self.list.GetItemCount()):
self.savechart(itemid, graphpath)
dialog.Destroy()
四、一些技巧
1. 设置快捷键
比如,希望按F5执行某个操作,可以在__init__函数中使用如下方法:
代码如下:
acceltbl = wx.AcceleratorTable([(wx.ACCEL_NORMAL, wx.WXK_F5, self.btnrun.GetId())])
self.SetAcceleratorTable(acceltbl)
还有一种很常用的情况,就是按ESC键关闭窗口。我们知道,有一种非常简单的办法就是使用SetId(wx.ID_CANCEL)方法,如:
代码如下:
self.btncancel = wx.Button(self.panel1, -1, 'Cancel', wx.Point(380, 280))
self.btncancel.SetId(wx.ID_CANCEL)
这样,按ESC键时,将会关闭当前Dialog,注意!这里是说Dialog,即继承自wx.Dialog的窗口对象,对于wx.Frame使用SetId似乎没有效果。
2. 使用定时器timer
在《wxPythonInAction》18章有个例子,如下:
代码如下:
import wx
import time
class ClockWindow(wx.Window):
def __init__(self, parent):
wx.Window.__init__(self, parent)
self.Bind(wx.EVT_PAINT, self.OnPaint)
self.timer = wx.Timer(self)
self.Bind(wx.EVT_TIMER, self.OnTimer, self.timer)
self.timer.Start(1000)
def Draw(self, dc):
t = time.localtime(time.time())
st = time.strftime("%I:%M:%S", t)
w, h = self.GetClientSize()
dc.SetBackground(wx.Brush(self.GetBackgroundColour()))
dc.Clear()
dc.SetFont(wx.Font(30, wx.SWISS, wx.NORMAL, wx.NORMAL))
tw, th = dc.GetTextExtent(st)
dc.DrawText(st, (w-tw)/2, (h)/2 - th/2)
def OnTimer(self, evt):
dc = wx.BufferedDC(wx.ClientDC(self))
self.Draw(dc)
def OnPaint(self, evt):
dc = wx.BufferedPaintDC(self)
self.Draw(dc)
class MyFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title="wx.Timer")
ClockWindow(self)
app = wx.PySimpleApp()
frm = MyFrame()
frm.Show()
app.MainLoop()
3. 使用多线程时你必须知道的:wx.CallAfter
在wxpython中编写多线程案例时特别需要注意,线程中通知窗口对象更新状态时,必须使用wx.CallAfter。同样是18章的例子:
代码如下:
import wx
import threading
import random
class WorkerThread(threading.Thread):
"""
This just simulates some long-running task that periodically sends
a message to the GUI thread.
"""
def __init__(self, threadNum, window):
threading.Thread.__init__(self)
self.threadNum = threadNum
self.window = window
self.timeToQuit = threading.Event()
self.timeToQuit.clear()
self.messageCount = random.randint(10,20)
self.messageDelay = 0.1 + 2.0 * random.random()
def stop(self):
self.timeToQuit.set()
def run(self):
msg = "Thread %d iterating %d times with a delay of %1.4f\n" \
% (self.threadNum, self.messageCount, self.messageDelay)
wx.CallAfter(self.window.LogMessage, msg)
for i in range(1, self.messageCount+1):
self.timeToQuit.wait(self.messageDelay)
if self.timeToQuit.isSet():
break
msg = "Message %d from thread %d\n" % (i, self.threadNum)
wx.CallAfter(self.window.LogMessage, msg)
else:
wx.CallAfter(self.window.ThreadFinished, self)
class MyFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title="Multi-threaded GUI")
self.threads = []
self.count = 0
panel = wx.Panel(self)
startBtn = wx.Button(panel, -1, "Start a thread")
stopBtn = wx.Button(panel, -1, "Stop all threads")
self.tc = wx.StaticText(panel, -1, "Worker Threads: 00")
self.log = wx.TextCtrl(panel, -1, "",
style=wx.TE_RICH|wx.TE_MULTILINE)
inner = wx.BoxSizer(wx.HORIZONTAL)
inner.Add(startBtn, 0, wx.RIGHT, 15)
inner.Add(stopBtn, 0, wx.RIGHT, 15)
inner.Add(self.tc, 0, wx.ALIGN_CENTER_VERTICAL)
main = wx.BoxSizer(wx.VERTICAL)
main.Add(inner, 0, wx.ALL, 5)
main.Add(self.log, 1, wx.EXPAND|wx.ALL, 5)
panel.SetSizer(main)
self.Bind(wx.EVT_BUTTON, self.OnStartButton, startBtn)
self.Bind(wx.EVT_BUTTON, self.OnStopButton, stopBtn)
self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
self.UpdateCount()
def OnStartButton(self, evt):
self.count += 1
thread = WorkerThread(self.count, self)
self.threads.append(thread)
self.UpdateCount()
thread.start()
def OnStopButton(self, evt):
self.StopThreads()
self.UpdateCount()
def OnCloseWindow(self, evt):
self.StopThreads()
self.Destroy()
def StopThreads(self):
while self.threads:
thread = self.threads[0]
thread.stop()
self.threads.remove(thread)
def UpdateCount(self):
self.tc.SetLabel("Worker Threads: %d" % len(self.threads))
def LogMessage(self, msg):
self.log.AppendText(msg)
def ThreadFinished(self, thread):
self.threads.remove(thread)
self.UpdateCount()
app = wx.PySimpleApp()
frm = MyFrame()
frm.Show()
app.MainLoop()
4. 需要在程序中启动另外一个GUI程序,而有不失去主窗口的焦点?
通常,我们调用os.popen运行其他外部程序是没有问题的。但是在wxpython中,将会让wx失去当前的焦点,即使得打开的程序成为了一个模式对话框。要解决这个问题可以使用wx自带的方法,wx.Execute。
代码如下:
wx.Execute('notepad')
五、学习资源
1. 官方:http://wiki.wxpython.org/FrontPage
2. 啄木鸟WIKI:http://wiki.woodpecker.org.cn/moin/WxPythonInAction
作者:CoderZh(CoderZh)
出处:http://coderzh.cnblogs.com

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Une brève introduction à la programmation GUI python L'interface graphique (Graphical User Interface, interface utilisateur graphique) est un moyen qui permet aux utilisateurs d'interagir graphiquement avec les ordinateurs. La programmation GUI fait référence à l'utilisation de langages de programmation pour créer des interfaces utilisateur graphiques. Python est un langage de programmation populaire qui fournit une riche bibliothèque GUI, ce qui rend la programmation GUI Python très simple. Introduction à la bibliothèque GUI Python Il existe de nombreuses bibliothèques GUI en Python, dont les plus couramment utilisées sont : Tkinter : Tkinter est la bibliothèque GUI fournie avec la bibliothèque standard Python. Elle est simple et facile à utiliser, mais ses fonctions sont limitées. PyQt : PyQt est une bibliothèque graphique multiplateforme dotée de fonctions puissantes.

Notes d'étude PHP : Présentation des structures de données et des algorithmes : Les structures de données et les algorithmes sont deux concepts très importants en informatique. Ils sont la clé pour résoudre les problèmes et optimiser les performances du code. Dans la programmation PHP, nous devons souvent utiliser diverses structures de données pour stocker et exploiter les données, et nous devons également utiliser des algorithmes pour implémenter diverses fonctions. Cet article présentera certaines structures de données et algorithmes couramment utilisés et fournira des exemples de code PHP correspondants. 1. Tableau de structure linéaire (Array) Le tableau est l'une des structures de données les plus couramment utilisées et peut être utilisé pour stocker des données ordonnées.

Python est un langage de programmation concis, facile à apprendre et efficace. Il est largement utilisé dans divers domaines tels que la science des données, l’intelligence artificielle, le développement de jeux, la programmation réseau, etc. Bien que Python soit livré avec certaines bibliothèques GUI, leurs fonctions sont relativement simples et ne peuvent pas répondre aux besoins de diverses applications complexes. Par conséquent, il existe de nombreuses bibliothèques d’interfaces graphiques parmi lesquelles choisir en Python, parmi lesquelles wxPython en fait partie, que cet article présentera en détail. Introduction à wxPython wxPython est une bibliothèque GUI open source multiplateforme basée sur

Introduction à la programmation pythonGUI La programmation PythonGUI, c'est-à-dire la programmation d'interface utilisateur graphique, est le processus de création d'interfaces de programme d'application à l'aide du langage Python. Les applications GUI comportent généralement des éléments tels que des fenêtres, des boutons, des zones de texte, des menus, etc., grâce auxquels les utilisateurs peuvent interagir avec le programme. La programmation GUI Python présente de nombreux avantages. Premièrement, cela peut rendre votre programme plus beau et plus facile à utiliser. Deuxièmement, il peut rendre votre programme multiplateforme, c'est-à-dire qu'il peut fonctionner sur différents systèmes d'exploitation. Troisièmement, cela peut rendre votre programme plus flexible et plus facile à étendre. Bibliothèques d'interface graphique Python couramment utilisées En Python, il existe de nombreuses bibliothèques d'interface graphique couramment utilisées, notamment Tkinter, PyQt, wxPython et PyG.

La programmation PythonGUI, comme son nom l'indique, est une technologie de programmation qui utilise le langage Python pour créer une interface utilisateur graphique (GUI). La programmation GUI Python présente de nombreux avantages, tels que : multiplateforme, prise en charge riche de bibliothèques tierces, syntaxe concise, etc. Par conséquent, la programmation Python GUI est profondément appréciée des programmeurs et est largement utilisée dans divers types de développement d’applications. Dans la programmation Python GUI, les bibliothèques tierces les plus couramment utilisées sont Tkinter, PyQt et wxPython. Tkinter fait partie de la bibliothèque standard Python et est simple et facile à utiliser, mais ses fonctionnalités sont limitées. PyQt et wxPython sont tous deux de puissantes bibliothèques GUI tierces, mais elles sont également plus performantes.

1. Bases de la programmation pythonGUI La programmation PythonGUI fait référence au processus de création d'une interface utilisateur graphique (GUI) à l'aide du langage Python. L'interface graphique est l'interface permettant aux utilisateurs d'interagir avec des applications, généralement composée de fenêtres, de boutons, de zones de texte, de zones de liste et d'autres contrôles. Python fournit une variété de bibliothèques GUI, telles que Tkinter, PyQt, wxPython, etc. Ces bibliothèques fournissent des contrôles riches et des mécanismes de gestion d'événements, permettant aux programmeurs Python de créer facilement des applications GUI belles et pratiques. 2. Démarrer avec la programmation PythonGUI Installation de la bibliothèque PythonGUI Avant de commencer la programmation GUI, vous devez d'abord installer la bibliothèque PythonGUI. En prenant Tkinter comme exemple, vous pouvez

Python est un langage de programmation puissant et facile à apprendre, adapté au développement dans divers domaines. En Python, il existe une variété de bibliothèques d'interfaces utilisateur graphiques (GUI) disponibles qui aident les développeurs à créer des applications de bureau interactives. Cet article présentera certaines bibliothèques d'interface graphique Python couramment utilisées et fournira des exemples de code spécifiques. Tkinter : Tkinter est la bibliothèque GUI standard de Python qui fournit des fonctionnalités permettant de créer des applications de fenêtre simples. En utilisant Tkinter, nous pouvons facilement

Notes d'étude PHP : Développement de systèmes de forums et de blogs Dans le domaine du développement Web, les forums et les systèmes de blogs sont des applications très courantes. Ils fournissent une plate-forme permettant aux utilisateurs de communiquer et de partager des informations. Dans cet article, nous expliquerons comment utiliser PHP pour développer un système simple de forum et de blog, et joindrons des exemples de code spécifiques. Configuration de l'environnement Tout d'abord, nous devons configurer un environnement de développement adapté au développement PHP. Nous pouvons utiliser des packages AMP (Apache, MySQL et PHP) comme XAMPP ou WAM
