使用pyside+designer將.ui檔案轉化為.py檔案的兩種方法
阿新 • • 發佈:2019-02-15
一、使用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_())