【问题标题】:Putting a button in the top corner of a QGroupBox在 QGroupBox 的顶角放置一个按钮
【发布时间】:2016-08-27 15:07:30
【问题描述】:

我有以下 QGroupBox:

我想在右上角添加一个按钮,如下所示:

这样用户就可以删除QGroupBox。这可能吗?如果没有,我可以使用哪些替代选项?

【问题讨论】:

    标签: python-2.7 pyqt pyside


    【解决方案1】:

    下面的代码做了类似的事情,不直接在组框的边框上绘制。

    import sys
    from PyQt4 import QtGui
    from PyQt4 import QtCore
    
    class GROUPBOX (QtGui.QWidget):
    
        def __init__(self):
            super(GROUPBOX, self).__init__()        
            self.initUI()        
    
        def initUI(self):        
            self.pushButton = QtGui.QPushButton(self)
            self.pushButton.setGeometry(QtCore.QRect(480, 10, 50, 20))
            self.pushButton.setObjectName ('pushButton')        
            self.pushButton.setText ('Delete') 
            self.pushButton.clicked.connect (self.delete)
            self.createGroupBox ()       
            self.resize(586, 335)
            self.show()   
    
        def createGroupBox (self) :
            self.groupBox = QtGui.QGroupBox(self)
            self.groupBox.setGeometry(QtCore.QRect(25, 25, 500, 300))        
            self.groupBox.setObjectName ('groupBox')
            self.groupBox.setTitle ('Group Box') 
            self.groupBox.show () 
    
        def delete (self) :        
            currentGroupBox     = self.findChildren (QtGui.QGroupBox) 
            if currentGroupBox :
                for eachGroupBox in currentGroupBox :
                    eachGroupBox.deleteLater()
                self.pushButton.setText ('Create')
            else :
                self.createGroupBox ()
                self.pushButton.setText ('Delete')             
    
    def main():
    
        app = QtGui.QApplication(sys.argv)
        ex = GROUPBOX()
        sys.exit(app.exec_())
    
    if __name__ == '__main__':
        main()
    

    【讨论】:

      【解决方案2】:

      我想出了如何使用 QCheckBox 实现非常接近我想要的东西:

      无悬停:

      悬停:

      我通过重新调整 QCheckBox 的用途来做到这一点,如下所示:

      import sys
      from PySide import QtGui, QtCore
      
      class DeleteButtonExample(QtGui.QWidget):
      
          def __init__(self):
              super(DeleteButtonExample, self).__init__()
      
              delete_gb = QtGui.QGroupBox('QGroupBox with Delete Button')
              group_box_vbl = QtGui.QVBoxLayout()
              group_box_vbl.setAlignment(QtCore.Qt.AlignTop)
              group_box_vbl.addSpacing(-14)
              delete_button_hbl = QtGui.QHBoxLayout()
              delete_button_cb = QtGui.QCheckBox()
              delete_button_cb.clicked.connect(self.delete_event)     
              delete_button_cb.setStyleSheet('QCheckBox::indicator:hover {image: url(del_btn_hover.png);}'
                                             'QCheckBox::indicator:!hover {image: url(del_btn_no_hover.png);}')
              delete_button_hbl.setAlignment(QtCore.Qt.AlignRight)
              delete_button_hbl.addWidget(delete_button_cb)
              delete_button_hbl.addSpacing(-13)
              group_box_vbl.addLayout(delete_button_hbl)
              delete_gb.setLayout(group_box_vbl)
      
              window_vbl = QtGui.QVBoxLayout()
              window_vbl.addWidget(delete_gb)
              self.setLayout(window_vbl)
      
              self.setGeometry(300, 300, 250, 150)
              self.setWindowTitle('QGroupBox with Delete Button')
              self.show()
      
          # @QtCore.Slot()
          def delete_event(self):
              msg = "Define the code to delete the QGroupBox here!"
              QtGui.QMessageBox().information(self, "Trying to delete the QGroupBox", msg)
      
      
      if __name__ == '__main__':
          app = QtGui.QApplication(sys.argv)
          example = DeleteButtonExample()
          sys.exit(app.exec_())
      

      导致

      以及两个图标(悬停和不悬停)的位置:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-01-15
        • 1970-01-01
        • 1970-01-01
        • 2023-01-19
        • 2020-10-19
        • 2020-10-16
        • 1970-01-01
        相关资源
        最近更新 更多