如何使 QDockWidget 透明/不透明?

时间:2021-03-01 11:15:21

标签: python qt pyqt

我正在创建一个程序,我需要其中一个小部件是透明的。换句话说,我希望能够做到,当我将透明的 Dock_1 拖到 Dock_2 上时,我能够同时看到两者。现在的问题是,当我尝试设置窗口不透明度时,它为整个程序设置。 简而言之,我如何创建一个按钮 X,让 Dock_1 透明,然后当我将它拖到 Dock_2 时,我可以看到两个表? 代码: 主文件

class MyWindow(QMainWindow):
    def __init__(self, parent=None):
        super(MyWindow, self).__init__(parent)
        self.title = "Test 2"
        self.top = 50
        self.left = 5
        self.width = 200
        self.height = 120
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)
        
        self.MyWidget()
        self.show() 
        
    def MyWidget(self):
        self.addDockWidget(Qt.BottomDockWidgetArea, MainDock2.dock_0_2(self)) 
        self.addDockWidget(Qt.TopDockWidgetArea, MainDock2.dock_1(self))
        self.addDockWidget(Qt.BottomDockWidgetArea, MainDock2.dock_2(self))

        
    def Btn_clicked(self) :
        #self.setAttribute(Qt.WA_TranslucentBackground, True)
        #self.setAttribute(Qt.WA_NoSystemBackground, False)

        if self.sender().text() == "Make the background transparent ?":
            self.btn.setText("Return the background back.")
            self.btn.setStyleSheet("""QPushButton { color:#fff; background-color:#000;font-size:10px;}""")
            self.setWindowOpacity(0.5)
        else:
            self.btn.setText("Make the background transparent ?")
            self.btn.setStyleSheet("""QPushButton {color: #000; font-size: 10px;}""")
            self.setWindowOpacity(1.0)

if __name__ == '__main__':
    App = QtWidgets.QApplication(sys.argv)
    Window = MyWindow()
    sys.exit(App.exec())

MainDock2.py

def dock_0_2(self):
    self.dock0 = QDockWidget("Transparent1", self)
    self.wid = QWidget(self) 
    g = QGridLayout()  
    self.btn = QtWidgets.QPushButton("Make the background transparent ?")
    self.btn.setStyleSheet("""QPushButton { color : #000; font-size: 10px;}""")
    g.addWidget(self.btn)
    self.btn.clicked.connect(self.Btn_clicked)
    self.wid.setLayout(g)
    self.dock0.setWidget(self.wid)
    return self.dock0

def dock_1(self):
  self.dock1 = QDockWidget("Row 2", self)
  self.tableView1 = QTableWidget(self) 
  self.tableView1.setRowCount(1) 
  self.tableView1.setColumnCount(6) 
  self.tableView1.setFixedHeight(50)
  self.tableView1.verticalHeader().setSectionResizeMode(QHeaderView.Stretch)
  self.tableView1.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
  labels = ['A', 'B', 'C', 'D', 'E', 'F']
  self.tableView1.setHorizontalHeaderLabels(labels)
  self.dock1.setWidget(self.tableView1)
  self.dock1.setFeatures(QDockWidget.DockWidgetFloatable|QDockWidget.DockWidgetMovable)
  return self.dock1

def dock_2(self):
  self.dock2 = QDockWidget("Row 2", self)
  self.tableView2 = QTableWidget(self) 
  self.tableView2.setRowCount(1) 
  self.tableView2.setColumnCount(6) 
  self.tableView2.setFixedHeight(50)
  self.tableView2.verticalHeader().setSectionResizeMode(QHeaderView.Stretch)
  self.tableView2.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
  labels = ['A', 'B', 'C', 'D', 'E', 'F']
  self.tableView2.setHorizontalHeaderLabels(labels)
  self.dock2.setWidget(self.tableView2)
  self.dock2.setFeatures(QDockWidget.DockWidgetFloatable|QDockWidget.DockWidgetMovable)
  return self.dock2

0 个答案:

没有答案