1. 程式人生 > >使用pyside+designer將.ui檔案轉化為.py檔案的兩種方法

使用pyside+designer將.ui檔案轉化為.py檔案的兩種方法

一、使用pyside-uic.exe將.ui檔案轉化為.py檔案

1、進入Pycharm的設定介面
這裡寫圖片描述

2、進入外部工具設定
這裡寫圖片描述

3、配置designer.exe,注意program路徑和working directory路徑
這裡寫圖片描述

4、配置pyUIC,注意找到pyside-uic.exe檔案所在的路徑和引數
這裡寫圖片描述

當配置完成之後就可以直接在pycharm中利用designer生成.ui檔案,並且使用pyUIC將.ui檔案轉化為.py檔案。這裡給出一個Pyqt的配置連結PyQt5+python3+pycharm開發環境配置,比較詳細,不清楚的朋友可以學習一下

二、使用pysideuic直接載入.ui檔案

我們開啟.ui檔案時會發現ui檔案實際上是一個xml檔案,我們可以寫一個方法解析ui檔案,並且返回該介面類及其基類,例如我們寫的是一個主視窗介面繼承自QMainWindow,類名為MyWindow,那麼我們就可以返回QMainWindow和MyWindow,這裡的程式碼來自PySide和PyQt載入ui檔案的兩種方法

# -*- coding: utf-8 -*-
from PySide import QtGui

import xml.etree.ElementTree as xml
from cStringIO import StringIO


def load_ui_file
(ui_file, type='PySide'):
if type == 'PySide': import pysideuic print pysideuic parsed = xml.parse(ui_file) widget_class = parsed.find('widget').get('class') form_class = parsed.find('class').text with open(ui_file, 'r') as f: o = StringIO() frame = {} pysideuic.compileUi(f, o, indent=0
) pyc = compile(o.getvalue(), '<string>', 'exec') exec pyc in frame form_class = frame['Ui_%s' % form_class] base_class = getattr(QtGui, widget_class) return form_class, base_class elif type == 'PyQt4': import PyQt4.uic return PyQt4.uic.loadUiType(ui_file) if __name__ == "__main__": ui_file = 'test.ui' load_ui_file(ui_file)

還有一種使用QUiloade可以直接動態載入ui檔案的方法QUiloader,示例程式碼為:

class MyWidget(QWidget):
    def __init__(self, parent):
        super(QWidget, self).__init__(parent)
        loader = QUiLoader()
        file = QFile(":/forms/myform.ui")
        file.open(QFile.ReadOnly)
        myWidget = loader.load(file, self)
        file.close()

        layout = QVBoxLayout()
        layout.addWidget(myWidget)
        self.setLayout(layout)

利用with語句可以簡化檔案操作:

from PySide.QtGui import *
from PySide.QtUiTools import *
from PySide.QtCore import *
import sys

class UiFile:
    def __init__(self,file_name):
        self.file_name = file_name
        self.file = QFile(file_name)
    def __enter__(self):
        return self.file
    def __exit__(self, exc_type, exc_val, exc_tb):
        self.file.close()

def Open_UiFile(filename):
    return UiFile(filename)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    loader = QUiLoader()
    with Open_UiFile('tt.ui') as file:
        file.open(QFile.ReadOnly)
        myDialog = loader.load(file)
    myDialog.button = QPushButton("test",myDialog)
    myDialog.verticalLayout.addWidget(myDialog.button)
    myDialog.show()
    sys.exit(app.exec_())