如何使QDockWidget透明/不透明度?

2024-10-02 00:35:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个程序,其中需要一个透明的小部件。换句话说,我希望当我把透明的dock_1拖到dock_2上时,我能看到这两个。现在的问题是,当我试图设置窗口不透明度时,它是为整个程序设置的。 简言之,我如何创建一个按钮X,使dock_1透明,然后当我拖动该按钮到dock_2时,我能够看到这两个表? 代码: main.py

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

Tags: theselfdefqtcolorbackgrounddockbtn

热门问题