【问题标题】:pyqt5 mdiArea display widget does not show contentpyqt5 mdiArea 显示小部件不显示内容
【发布时间】:2019-01-11 00:22:32
【问题描述】:

我试图在 pyqt5 的 mdiArea 内显示一个小部件。它显示一个表单,但表单内没有内容。这是相关的代码。我尝试了单独的 people_display,它工作得很好。有谁知道是否可以将 uic.loadUI 放入 mdiArea 内的小部件中? people_display.ui 只包含一个 TableView 和一个按钮框。 main_window.ui 只是一个菜单栏和中间的 mdiArea。我使用 qt Designer 创建文件。我想将这些文件分开,以便以后在我继续我的项目并想要对它们进行更改时更容易编辑它们。

from PyQt5 import QtWidgets, uic, Qt
from PyQt5.QtWidgets import QMainWindow, QWidget, QDialog
from cal.person import Person
import sys


class Main(QMainWindow):

    def __init__(self, parent=None):
        super(Main, self).__init__(parent)
        uic.loadUi('main_window.ui', self)
        self.menuAddPeople.triggered.connect(self.show_add_people)
        self.menuShowPeople.triggered.connect(self.show_show_people)

    def show_add_people(self):
        dialog = AddPeople(self)
        dialog.show()

    def show_show_people(self):
        widget = uic.loadUi('people_display.ui')
        """
        people_list = Person.person_list()
        model = Qt.QStandardItemModel()
        first_names = []
        for item in people_list:
            first_names.append(Qt.QStandardItem(item['first_name']))
        last_names = []
        for item in people_list:
            last_names.append(Qt.QStandardItem(item['last_name']))
        emails = []
        for item in people_list:
            emails.append(Qt.QStandardItem(item['email']))
        roles = []
        for item in people_list:
            roles.append(Qt.QStandardItem(item['role_id']))
        model.appendColumn(first_names)
        model.appendColumn(last_names)
        model.appendColumn(emails)
        model.appendColumn(roles)
        widget.peopleTableView.setModel(model)
        """
        model = Qt.QStandardItemModel()
        model.appendRow(Qt.QStandardItem('asdf'))
        widget.peopleTableView.setModel(model)
        self.mdiArea.addSubWindow(widget)
        print(self.mdiArea.subWindowList())


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    main = Main()
    main.show()
    sys.exit(app.exec_())

出于测试目的,我修改了代码。

【问题讨论】:

    标签: python pyqt pyqt5


    【解决方案1】:

    我已经测试了你的代码,只需要显示窗口:

    def show_show_people(self):
        widget = uic.loadUi('people_display.ui')
        # people_list = Person.person_list()
        # for testing
        people_list = [{"first_name": "f1", "last_name": "l1", "email": "e1", "role_id": "r1"},
                       {"first_name": "f2", "last_name": "l2", "email": "e2", "role_id": "r2"},
                       {"first_name": "f3", "last_name": "l3", "email": "e3", "role_id": "r3"}]
    
    
        model = Qt.QStandardItemModel(widget)
        for item in people_list:
            it_first_name = Qt.QStandardItem(item['first_name'])
            it_last_name = Qt.QStandardItem(item['last_name'])
            it_email = Qt.QStandardItem(item['email'])
            it_role_id = Qt.QStandardItem(item['role_id'])
            model.appendRow([it_first_name, it_last_name, it_email, it_role_id])
        widget.peopleTableView.setModel(model)
        self.mdiArea.addSubWindow(widget)
        widget.show()
    

    【讨论】:

    • 嗯,这很尴尬。感谢您对其进行测试。现在可以正常使用了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    • 2023-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多