PythonGUI-TK、Pyside

PythonGUI-TK、Pyside

[email protected]

2014年9月24日

 

1 GUI-TK

1.1 概述

Python标准GUI,调用Tcl/tk接口,跨平台,但速度慢。

IDEL就是Python使用TKinter构建的。

1.2 原理

1.2.1语法

Python构造tk接口的映射语法来调用tk。

所有的属性使用key=value来表示。

创建时设置:作为参数传入:l1=Label(master=top,text=”mylabel”)

创建后设置:l1[“text”] = “mylabel1”

或者使用l1.config(text=”mylabel2”,bg=”red”)

1.2.2GUI组织

树形组织,每层可以添加子控件。并通过pack()摆放子控件。

1.2.3几何

相对摆放:pack()。

表格摆放: grid()。

精确摆放: place()。

1.2.4事件处理

每个事件有个command标签,设置对应的函数名称。

可以使用bind函数进行事件绑定。

1.2.5启动

启动消息循环:mainloop()。

参考:http://www.yiibai.com/python/python_gui_programming.html

http://www.w3cschool.cc/python/python-gui-tkinter.html

1.3 使用方法

导入:使用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

2 GUI-pyside

2.1 概述

pyside是对Qt和QML的python封装。主要接口由QML提供。可以直接调用QML文件(QML封装),也可以将UI文件生成python文件(Qt封装)。

虽然PySide的接口与QML更加相似,但是由于Python在前台逻辑控制上较QML有更高的灵活性,这里倾向于用Qt的UI文件生成界面。

2.2 安装方法:

下载PySide并安装(直接使用最新版,自带QtDesigner,与系统的Qt无关)。

需要一个pkg_resources.py补丁。

参考:http://wudihzh.info/windows下使用pyside开发gui应用程序/

2.3 使用方法

2.3.1直接使用python

可以直接使用Python构造qt的类来生成GUI。

2.3.2 将designer生成ui文件转换为py界面

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_()

 

你可能感兴趣的:(python,Tcl,TK,PySide,tcltk)