将按钮放在QGroupBox的顶角

时间:2016-05-02 18:44:54

标签: python-2.7 pyqt pyside

我有以下QGroupBox: Plain QGroupBox

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

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

2 个答案:

答案 0 :(得分:2)

下面的代码执行类似的操作,而不是直接在组框的边框上绘图。

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()

答案 1 :(得分:1)

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

没有悬停: Delete button, no hover

悬停: Delete button, hover

我是通过重新使用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_())

导致

enter image description here

并且两个图标(悬停和没有悬停)是:

No hover icon

Hover icon