gpt4 book ai didi

python - 如何使用 .ui 文件创建小部件?

转载 作者:行者123 更新时间:2023-12-01 07:55:10 24 4
gpt4 key购买 nike

我想在 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()

我应该如何更正代码?

最佳答案

问题是您混淆了概念,当您使用 QUiLoader 时,您正在创建窗口,在本例中是 window 变量,它是局部变量,也就是说,.ui 不填写MyWidget。

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

from PySide2.QtWidgets import QMainWindow, QApplication, QDesktopWidget
from PySide2.QtCore import QFile
from PySide2.QtUiTools import QUiLoader


def create_widget():
ui_file = QFile("test.ui")
if ui_file.open(QFile.ReadOnly):
loader = QUiLoader()
window = loader.load(ui_file)
ui_file.close()
return window


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 = create_widget()
self.setCentralWidget(self.home_widget)

self.show()

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

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():
import sys

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


if __name__ == "__main__":
main()

关于python - 如何使用 .ui 文件创建小部件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56019118/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com