PyQt5 MDI 子窗口作为一个类

Elcid_91

我有一个带有菜单和 mdiArea 的 QMainWindow。当我点击一个菜单项时,我需要显示一个 qDialog,比如说,一个数据列表。

我想构建带有数据列表的 QDialog 作为它自己的类;但是,我不知道如何将它作为子窗口附加到 mdiArea。有没有可能得到一个关于如何做到这一点的小例子?

import sys
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.uic import loadUi

class CliDataBrowser(QDialog):
    def __init__(self,parent=None):
    super(CliDataBrowser,self).__init__(parent)
    loadUi("CliReportsUI/clidata_browser.ui",self)


class MainApplication(QMainWindow):
    def __init__(self,*args):
        super(MainApplication,self).__init__(*args)
        loadUi("CliReportsUI/clireportmain.ui",self)

    @pyqtSlot()
    def on_mnu_close_triggered(self):
        sys.exit();

    @pyqtSlot()
    def on_mnu_master_triggered(self):
        dataBrowser = CliDataBrowser(self) # <--- Need this to be a mdi subwindow
        dataBrowser.show()


app = QApplication(sys.argv)
mainWin = MainApplication()
mainWin.show()
sys.exit(app.exec_())

clireportmain.ui:

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>CliReportMain</class>
 <widget class="QMainWindow" name="CliReportMain">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>1062</width>
    <height>626</height>
   </rect>
  </property>
  <property name="sizePolicy">
   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
    <horstretch>0</horstretch>
    <verstretch>0</verstretch>
   </sizepolicy>
  </property>
  <property name="windowTitle">
   <string>PPS Custom Client Reports</string>
  </property>
  <property name="windowIcon">
   <iconset resource="clireports.qrc">
    <normaloff>:/Images/clireports.png</normaloff>:/Images/clireports.png</iconset>
  </property>
  <widget class="QWidget" name="centralWidget">
   <property name="enabled">
    <bool>true</bool>
   </property>
   <property name="sizePolicy">
    <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
     <horstretch>0</horstretch>
     <verstretch>0</verstretch>
    </sizepolicy>
   </property>
   <property name="autoFillBackground">
    <bool>false</bool>
   </property>
   <layout class="QVBoxLayout" name="verticalLayout">
    <property name="leftMargin">
     <number>0</number>
    </property>
    <property name="topMargin">
     <number>0</number>
    </property>
    <property name="rightMargin">
     <number>0</number>
    </property>
    <property name="bottomMargin">
     <number>0</number>
    </property>
    <item>
     <widget class="QMdiArea" name="mdiArea">
      <property name="sizePolicy">
       <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
        <horstretch>0</horstretch>
        <verstretch>0</verstretch>
       </sizepolicy>
      </property>
      <property name="frameShadow">
       <enum>QFrame::Plain</enum>
      </property>
      <property name="sizeAdjustPolicy">
       <enum>QAbstractScrollArea::AdjustIgnored</enum>
      </property>
      <property name="background">
       <brush brushstyle="SolidPattern">
        <color alpha="255">
         <red>20</red>
         <green>38</green>
         <blue>57</blue>
        </color>
       </brush>
      </property>
     </widget>
    </item>
   </layout>
  </widget>
  <widget class="QMenuBar" name="menuBar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>1062</width>
     <height>22</height>
    </rect>
   </property>
   <property name="styleSheet">
    <string notr="true"/>
   </property>
   <widget class="QMenu" name="menuFile">
    <property name="title">
     <string>File</string>
    </property>
    <addaction name="mnu_Close"/>
   </widget>
   <widget class="QMenu" name="menuReports">
    <property name="title">
     <string>Reports</string>
    </property>
   </widget>
   <widget class="QMenu" name="menuDatasets">
    <property name="title">
     <string>Datasets</string>
    </property>
    <addaction name="mnu_Master"/>
    <addaction name="mnu_ICD10Master"/>
    <addaction name="separator"/>
    <addaction name="mnu_ProviderMaster"/>
    <addaction name="mnu_InsuranceMaster"/>
   </widget>
   <addaction name="menuFile"/>
   <addaction name="menuReports"/>
   <addaction name="menuDatasets"/>
  </widget>
  <widget class="QStatusBar" name="statusBar"/>
  <action name="mnu_Close">
   <property name="text">
    <string>Close</string>
   </property>
  </action>
  <action name="mnu_Master">
   <property name="text">
    <string>Master</string>
   </property>
  </action>
  <action name="mnu_ICD10Master">
   <property name="text">
    <string>ICD-10 Master</string>
   </property>
  </action>
  <action name="mnu_ProviderMaster">
   <property name="text">
    <string>Provider Master</string>
   </property>
  </action>
  <action name="mnu_InsuranceMaster">
   <property name="text">
    <string>Insurance Master</string>
   </property>
  </action>
 </widget>
 <layoutdefault spacing="6" margin="11"/>
 <resources>
  <include location="clireports.qrc"/>
 </resources>
 <connections/>
</ui>
埃利亚内斯克

您必须使用以下addSubWindow()方法QMdiArea

@pyqtSlot()
def on_mnu_master_triggered(self):
    dataBrowser = CliDataBrowser(self)
    subWindow = self.mdiArea.addSubWindow(dataBrowser)
    subWindow.show()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用qtDesigner将子窗口停靠在pyqt5的MDI区域中

来自分类Dev

PyQt5 Focus QMainWindow 作为第一个窗口

来自分类Dev

PyQt5弹出窗口

来自分类Dev

调整窗口大小时,PyQt5仅调整一个子窗口小部件的大小

来自分类Dev

如何在 PyQt5 的主窗口中嵌入一个窗口

来自分类Dev

Pyqt5从QtWebChannel移动窗口

来自分类Dev

PyQt5 DatePicker弹出窗口

来自分类Dev

关闭另一个MDI子窗体后,启用MDI子窗体的TButton

来自分类Dev

pyqt5从父窗口关闭子窗口

来自分类Dev

从主窗口PyQt5的一个按钮弹出对话框

来自分类Dev

成功登录PyQt5 Python3后打开另一个窗口

来自分类Dev

如何回调同一个窗口!?PYQT5

来自分类Dev

如何从PyQt5中的另一个类运行函数

来自分类Dev

从PyQt5中的另一个类访问变量

来自分类Dev

如何从PyQt5中的另一个类覆盖变量?

来自分类Dev

如何从另一个 pyqt5 应用程序打开 pyqt5 应用程序?

来自分类Dev

PyQt5:同一窗口的多个实例

来自分类Dev

Qt创建MDI文档窗口

来自分类Dev

MDI子窗体的大小控制

来自分类Dev

如何从MDI子窗体中获取MDI父控件

来自分类Dev

当辅助窗口关闭时刷新主窗口PyQt5

来自分类Dev

如何调整在PyQt5窗口内QWebEnginePage?

来自分类Dev

在PyQt5中对齐弹出窗口小部件

来自分类Dev

PyQT5在窗口上显示花费的时间

来自分类Dev

将窗口属性重置为默认pyqt5

来自分类Dev

用pyqt5 mvc进行窗口切换

来自分类Dev

PyQt5在消息窗口中显示文件内容

来自分类Dev

如何在 PyQt5 中居中窗口标题?

来自分类Dev

PYQT5 从窗口标题中获取文本?