PythonGUI-TK、Pyside
2014年9月24日
Python标准GUI,调用Tcl/tk接口,跨平台,但速度慢。
IDEL就是Python使用TKinter构建的。
Python构造tk接口的映射语法来调用tk。
所有的属性使用key=value来表示。
创建时设置:作为参数传入:l1=Label(master=top,text=”mylabel”)
创建后设置:l1[“text”] = “mylabel1”
或者使用l1.config(text=”mylabel2”,bg=”red”)
树形组织,每层可以添加子控件。并通过pack()摆放子控件。
相对摆放:pack()。
表格摆放: grid()。
精确摆放: place()。
每个事件有个command标签,设置对应的函数名称。
可以使用bind函数进行事件绑定。
启动消息循环:mainloop()。
参考:http://www.yiibai.com/python/python_gui_programming.html
http://www.w3cschool.cc/python/python-gui-tkinter.html
导入:使用form tkinter import */import tkinter
示例:
from Tkinter import *
def newF():
print "newF"
def saveF():
print "saveF"
def clk():
print "click"
top = Tk()
top.geometry('600x300')
l1 = Label(top,text='mylabel')
l1["text"] ="mylabel1"
l1.config(text="mylabel2",relief="solid")
l1.pack(anchor="nw",fill=X,expand=1)
mFile = Menu(top)
mFile.add_command(label="new",command=newF)
mFile.add_command(label="save",command=saveF)
top.config(menu=mFile)
btn =Button(top,text="Hello",command= clk)
btn.pack(side=LEFT)
top.mainloop()
参考:http://blog.sina.com.cn/s/blog_4b5039210100eoq7.html
pyside是对Qt和QML的python封装。主要接口由QML提供。可以直接调用QML文件(QML封装),也可以将UI文件生成python文件(Qt封装)。
虽然PySide的接口与QML更加相似,但是由于Python在前台逻辑控制上较QML有更高的灵活性,这里倾向于用Qt的UI文件生成界面。
下载PySide并安装(直接使用最新版,自带QtDesigner,与系统的Qt无关)。
需要一个pkg_resources.py补丁。
参考:http://wudihzh.info/windows下使用pyside开发gui应用程序/
可以直接使用Python构造qt的类来生成GUI。
1) 在Designer中生成UI
2) 使用pyside-uic生成ui.py
pyside-uic输入的ui文件 –o 输出的py文件
C:\Python27\Scripts>pyside-uic.exeD:/test/python/architech/mainwindow.ui -o D:/
test/python/architech/mainwindow.py
3) 将py导入应用
from PySide.QtGui import *
from mainwindow import *
4) 在应用中构造ui的对应类
classMainWindow(QMainWindow,Ui_MainWindow):
def __init__(self,parent = None):
super(MainWindow,self).__init__(parent)
self.setupUi(self)
self.pushButton.clicked.connect(showMsg)
self.pushButton_2.clicked.connect(changeText)
self.pushButton_3.clicked.connect(close)
5) 为类中的控件添加响应函数
def showMsg():
print "showMsg"
msg = QMessageBox()
msg.setText("this is messagebox")
msg.exec_()
def changeText():
print "changeText"
m.label.setText("clicked text")
def close():
print "close"
app.quit()
sys.exit(0)
6) 运行程序主函数
if(__name__ =="__main__"):
app = QApplication(sys.argv)
m = MainWindow()
m.show()
app.exec_()
参考:http://blog.sina.com.cn/s/blog_62c832270101dca6.html
示例:
from PySide.QtGui import *
from mainwindow import *
import sys
classMainWindow(QMainWindow,Ui_MainWindow):
def __init__(self,parent = None):
super(MainWindow,self).__init__(parent)
self.setupUi(self)
self.pushButton.clicked.connect(showMsg)
self.pushButton_2.clicked.connect(changeText)
self.pushButton_3.clicked.connect(close)
def showMsg():
print "showMsg"
msg = QMessageBox()
msg.setText("this is messagebox")
msg.exec_()
def changeText():
print "changeText"
m.label.setText("clicked text")
def close():
print "close"
app.quit()
sys.exit(0)
if(__name__ =="__main__"):
app = QApplication(sys.argv)
m = MainWindow()
m.show()
app.exec_()