如何使用.ui文件创建窗口小部件?

时间:2019-05-07 09:05:40

标签: python qt-designer pyside2

我想在MainWindow中创建一个小部件,该小部件从使用QtDesigner创建的文件中获取设计。

  • 我创建的.ui文件为test.ui
  • 我有一个继承自QMainWindow的MainWindow实例,该实例将创建一个堆叠的小部件,其中包含许多小部件。为了简单起见,在此示例中,它将仅创建一个小部件作为中央小部件
  • MainWindow中的My Widget实例是必须从.ui文件中获取其设计的实例

应用程序实际显示一个空白窗口

代码如下:

from PySide2.QtWidgets import QMainWindow, QApplication, QDesktopWidget, QWidget
from PySide2.QtCore import QCoreApplication, Qt

from PySide2.QtUiTools import QUiLoader
from PySide2.QtCore import QFile

class MyWidget(QWidget):
    def __init__(self, parent=None):        
        super(MyWidget, self).__init__(parent)

    ui_file = QFile("test.ui")
    ui_file.open(QFile.ReadOnly)

    loader = QUiLoader()
    window = loader.load(ui_file)
    ui_file.close()


class MainWindow(QMainWindow):

    def __init__(self):
        super(MainWindow, self).__init__()
        self.ui_dim_percentage = 70/100
        self.initUI()

    def initUI(self):
        self.center()

        self.home_widget = MyWidget(self)
        self.setCentralWidget(self.home_widget)

        self.show()

    def center(self): # resizes the UI to a percentage of the screen and centers the widget

        screen_size = QDesktopWidget().screenGeometry()
        self.resize(screen_size.width()*self.ui_dim_percentage, screen_size.height()*self.ui_dim_percentage)

        qr = self.frameGeometry()
        cp = QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())


def main():

    app = QApplication(sys.argv)
    ex = MainWindow()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

我应该如何纠正代码?

2 个答案:

答案 0 :(得分:1)

问题是您在混淆概念,当您使用QUiLoader时,正在创建的窗口在这种情况下是 canvas.saveLayer(); Paint().shader = ImageShader(uiImage, TileMode.repeated, TileMode.repeated, deviceTransform); 变量,它是局部变量,即.ui不会填充MyWidget

解决方案不是创建MyWidget类,而是使用window变量。

window

答案 1 :(得分:0)

您是否尝试过转换ui文件?

您可以在shell上使用pyuic4命令:

Array
(
    [totals] => Array
        (
            [errors] => 2
            [warnings] => 0
            [fixable] => 0
        )

    [files] => Array
        (
            [/home/ke/Test-Code/CODE.php] => Array
                (
                    [errors] => 2
                    [warnings] => 0
                    [messages] => Array
                        (
                            [0] => Array
                                (
                                    [message] => Missing file doc comment
                                    [source] => PEAR.Commenting.FileComment.Missing
                                    [severity] => 5
                                    [type] => ERROR
                                    [line] => 2
                                    [column] => 1
                                    [fixable] => 
                                )

                            [1] => Array
                                (
                                    [message] => Expected "for (...) {\n"; found "for (...)\n{\n"
                                    [source] => PEAR.ControlStructures.ControlSignature.Found
                                    [severity] => 5
                                    [type] => ERROR
                                    [line] => 12
                                    [column] => 1
                                    [fixable] => 
                                )

                        )

                )

        )

)