吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1741|回复: 1
收起左侧

[学习记录] PySide2 (MDI)学习笔记,遇到大坑

[复制链接]
Cool_Breeze 发表于 2021-8-11 19:09
1.png

一开始使用的 QMdiSubWindow 类,发现它已经有了布局 QVBoxLayout (竖立,垂直),这个布局不是我需要的;
然后自己 new 了一个水平布局【QHBoxLayout】,希望使用使用 setLayout 【setLayout(QLayout)】 方法覆盖原有布局!但是失败了,
然后就是开启百度查找 怎么更改原有布局,(网上说: 删除原有布局啊【怎么删除不知道,网上也没有】等等。。。)整整折腾了 2 个多小时,中间几度怀疑人生!

最后没办法,要不要自己写一个  QMdiSubWindow ?; 点开  QMdiSubWindow, 发现它 派生自 QWidgetInherits from QWidget.】,
要不试试,也从 QWidget 继承下来写一个 自己的 QMdiSubWindow
[Python] 纯文本查看 复制代码
class MySubWindow(QWidget):
    ''' 自定义 mdi 子窗口'''
    def __init__(self, prent = None):
        super().__init__(prent)
        
        self.sList = []
        
        layout = QHBoxLayout()
        
        label = QLabel("拖动滑块改变颜色", self)
        label.setFont(QFont("微软雅黑", 16))
        
        
        s1 = QScrollBar(self)
        s2 = QScrollBar(self)
        s3 = QScrollBar(self)
        s1.setMaximum(255)
        s2.setMaximum(255)
        s3.setMaximum(255)
        self.sList.append(s1)
        self.sList.append(s2)
        self.sList.append(s3)
        
        s1.sliderMoved.connect(lambda: WindowMain.scrollBars(self.sList, label))
        s2.sliderMoved.connect(lambda: WindowMain.scrollBars(self.sList, label))
        s3.sliderMoved.connect(lambda: WindowMain.scrollBars(self.sList, label))
        
        layout.addWidget(s1)
        layout.addWidget(s2)
        layout.addWidget(s3)
        layout.addWidget(label)
        
        self.setLayout(layout)


试试代码能不能跑起来, 卧槽 居然成功了。。。。 卧槽。 槽。槽。槽。槽。

话说回来: 到底怎样才能更改掉  QMdiSubWindow 的 布局方式??? 希望大佬们不吝赐教!!!非常感谢!!!

源代码如下:
[Python] 纯文本查看 复制代码
# -*- coding : utf-8 -*-

from PySide2.QtWidgets import QApplication, QMessageBox, QFileDialog,QMdiSubWindow,QMdiArea,QScrollBar,QHBoxLayout,QVBoxLayout,QLabel,QFormLayout,QWidget
from PySide2.QtUiTools import QUiLoader
from PySide2.QtGui import QPalette,QFont,QColor


import sys
import time
import threading


class WindowMain(object):

    def __init__(self):
        self.ui = QUiLoader().load('MDI.ui') # 加载 ui 文件返回如 MainWindow 类型
        # print(self.ui)
        
        # 工具栏 动作信号连接到槽
        self.ui.actionAdd.triggered.connect(self.createSubWindow)
        self.ui.actiontile.triggered.connect(lambda: self.ui.mdiArea.tileSubWindows())
        self.ui.actioncascade.triggered.connect(lambda: self.ui.mdiArea.cascadeSubWindows())
        self.ui.actionremove.triggered.connect(lambda: self.ui.mdiArea.removeSubWindow(self.ui.mdiArea.currentSubWindow()))
        self.ui.actionclose.triggered.connect(lambda: self.ui.mdiArea.closeActiveSubWindow())
        
    
    # 创建 mdi 子窗口
    def createSubWindow(self):
        sub = MySubWindow()
        sub.setWindowTitle("SUB")
        self.ui.mdiArea.addSubWindow(sub) # 子窗口需要添加到 MDI 窗口
        sub.show() # 需要显示出来
    
    @staticmethod
    def scrollBars(scrollBarList, label):
        r = scrollBarList[0].value()
        g = scrollBarList[1].value()
        b = scrollBarList[2].value()
        
        palette = QPalette()
        palette.setColor(QPalette.Foreground, QColor(r, g, b, 255))
        label.setPalette(palette) # 设置字体颜色


class MySubWindow(QWidget):
    ''' 自定义 mdi 子窗口'''
    def __init__(self, prent = None):
        super().__init__(prent)
        
        self.sList = []
        
        layout = QHBoxLayout()
        
        label = QLabel("拖动滑块改变颜色", self)
        label.setFont(QFont("微软雅黑", 16))
        
        
        s1 = QScrollBar(self)
        s2 = QScrollBar(self)
        s3 = QScrollBar(self)
        s1.setMaximum(255)
        s2.setMaximum(255)
        s3.setMaximum(255)
        self.sList.append(s1)
        self.sList.append(s2)
        self.sList.append(s3)
        
        s1.sliderMoved.connect(lambda: WindowMain.scrollBars(self.sList, label))
        s2.sliderMoved.connect(lambda: WindowMain.scrollBars(self.sList, label))
        s3.sliderMoved.connect(lambda: WindowMain.scrollBars(self.sList, label))
        
        layout.addWidget(s1)
        layout.addWidget(s2)
        layout.addWidget(s3)
        layout.addWidget(label)
        
        self.setLayout(layout)

    
# 开始运行
app = QApplication(sys.argv)
winMain = WindowMain()
winMain.ui.show()
app.exec_()

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

kvttt_2021 发表于 2021-8-11 21:01
你的MDI.ui呢?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-1 06:57

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表