PySide2 (MDI)学习笔记,遇到大坑
一开始使用的 QMdiSubWindow 类,发现它已经有了布局 QVBoxLayout (竖立,垂直),这个布局不是我需要的;
然后自己 new 了一个水平布局【QHBoxLayout】,希望使用使用 setLayout 【setLayout(QLayout)】 方法覆盖原有布局!但是失败了,
然后就是开启百度查找 怎么更改原有布局,(网上说: 删除原有布局啊【怎么删除不知道,网上也没有】等等。。。)整整折腾了 2 个多小时,中间几度怀疑人生!
最后没办法,要不要自己写一个QMdiSubWindow ?; 点开QMdiSubWindow, 发现它 派生自 QWidget 【Inherits from QWidget.】,
要不试试,也从 QWidget 继承下来写一个 自己的 QMdiSubWindow;
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 的 布局方式??? 希望大佬们不吝赐教!!!非常感谢!!!
源代码如下:
# -*- 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.value()
g = scrollBarList.value()
b = scrollBarList.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_() 你的MDI.ui呢?
页:
[1]