PyQt5-控件之QDialog(UI-业务分离搭建自定义xDialog)

2024-01-01 06:37:31

1.继承QtWidgets.QWidget自定义对话框

继承于QtWidgets.QWidget自定义一个对话框类:SelectingDlg

class SelectingDlg(QtWidgets.QWidget):    
    def __init__(self):        
        super(SelectingDlg, self).__init__()        
        self.initUI()        
    def initUI(self):
        self.setWindowModality(Qt.ApplicationModal)
        self.setWindowTitle('建立条件选择集')
        self.resize(400, 300)   # set dialog size to 400*300
        self.lb = QLabel("Data Deep Learning",self)        # add a label to this dialog
        self.lb.setGeometry(QtCore.QRect(370, 240, 201, 51))   # set label position and size

注:
(1)通过self.setWindowModality(Qt.ApplicationModal)设置对话框的显示模式:

Qt.NonModal # 非模态:正常模式
Qt.WindowModal # 半模态:窗口级模态对话框,阻塞父窗口、父窗口的父窗口及兄弟窗口
Qt.ApplicationModal # 模态:应用程序级模态对话框,阻塞整个应用程序的所有窗口

存在的比较麻烦的问题:
(1)需要自己代码设置Dlg窗口的尺寸、确定左上角的坐标,可能用到的类有:QPoint、QSize,QRect以及QDesktopWidget
(2)需要自己代码设置Dlg窗口内控件与Dlg的相对位置

显示如下:在这里插入图片描述

2.继承QtWidgets.QDialog自定义对话框

表面上的差别:看右上角:没有了最大化、最小化按钮,多了个帮助按钮在这里插入图片描述

3.使用Qt Designer设计UI,实现业务-UI分离

(1)先用Qt Designer设计对话框大小与控件布局;
(2)参考“业务-UI分离”实现对话框UI与对应业务类代码分离。
(3)实践过程

1) 先用Qt Designer设计对话框大小与控件布局,保存:SelectingDlg.ui

2) 使用PYQT:Compile Form 自动生成:Ui_SelectingDlg.py

3) 声明类定义

class SelectingDlg(Ui_SelectingDlg,QDialog):
    
    #初始化本类
    def __init__(self):
        super(SelectingDlg,self).__init__()       
        self.setupUi(self)  # 传递自己

4) 响应菜单项triggered

@QtCore.pyqtSlot()   
  def on_actionSliceCuting_triggered(self): #响应选择菜单        
      self.dlg=SelectingDlg()
      self.dlg.show()   #如无该句,则对话框不会显示

5) 实践过程遇到的问题

类定义代码中如无:

self.setupUi(self) # 传递自己

程序也会运行,但打开的对话框是一个空对话框
在这里插入图片描述

需要多重继承:Ui_SelectingDlg和QDialog,否则出现,第一个碰到的错误提示:

AttributeError: ‘SelectingDlg’ object has no attribute ‘setObjectName’

多重继承:Ui_SelectingDlg和QDialog,代码顺序产生的问题

class SelectingDlg(Ui_SelectingDlg,QDialog):

建议:Ui_SelectingDlg在QDialog前面,否则VS写代码时,不会自动识别类对象(被识别的对象名,显示“蓝色”),给写代码造成困难

不小心多重继承了:Ui_SelectingDlg和QFileDialog,提示:

QLayout: Attempting to add QLayout “” to SelectingDlg “Dialog”, which already has a layout

该提示有点奇怪,既不是错误,也不是严重warning, 程序也未中断,显示出一个,既包含缺省的QFileDialog,也有Ui_SelectingDlg的布局:
在这里插入图片描述
正确的应该是:

在这里插入图片描述
注:提示“QLayout: Attempting to add QLayout “” to SelectingDlg “Dialog”, which already has a layout”好像产生的原因,其他网友也遇到,但产生的具体情形可能很多

文章来源:https://blog.csdn.net/www_djh/article/details/135247530
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。