我需要添加两个标签,重叠2个QPushButton。如果用户点击右边的标签,他们就点击右边的按钮,如果他们点击左边的标签,他们就点击左边的。
我希望能有这样的东西。
其目的是为了节省显示数据的空间。
为了做到这一点,我创建了一个继承自QWidget的类,它有一个Boxlayout和两个按钮。
class DoublePushButton(QWidget):
clicked = Signal(int)
def __init__(self, **kargs) -> None:
super().__init__(**kargs)
self.data_to_display = 0
self.right_button = QPushButton()
self.right_button.pressed.connect(self.rightF)
self.left_button = QPushButton()
self.left_button.pressed.connect(self.leftF)
self.button_layout = QHBoxLayout()
self.button_layout.setContentsMargins(0,0,0,0)
self.button_layout.setSpacing(0)
buttons = [self.left_button,self.right_button]
for i in buttons:
self.setButtonParam(i)
self.button_layout.addWidget(i)
self.setLayout(self.button_layout)
def setButtonParam(self, button):
button.setFlat(True)
button.setMinimumSize(30,120)
button.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum)
def rightF(self):
self.clicked.emit(1)
def leftF(self):
self.clicked.emit(-1)
然后我在VBoxLaout中创建2个标签。
class TitleData(QWidget):
def __init__(self,title="Title", data="Data", **kwargs):
super().__init__(**kwargs)
self.title = title
self.data = data
self.title_label = QLabel(self.title)
self.data_label = QLabel(self.data)
self.title_label.setAttribute(Qt.WA_NoSystemBackground)
self.title_label.setAttribute(Qt.WA_TransparentForMouseEvents)
self.data_label.setAttribute(Qt.WA_NoSystemBackground)
self.data_label.setAttribute(Qt.WA_TransparentForMouseEvents)
self.l = QVBoxLayout(self.parent())
self.l.addWidget(self.title_label)
self.l.addWidget(self.data_label)
self.setLayout(self.l)
当我试图像这样把title_data重叠在DoublePushButton上。
class DataDisplay(QWidget):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.sub_widget = DoublePushButton()
self.sub_widget.clicked.connect(self.update_data_choice)
self.xxx = TitleData(parent=self.sub_widget)
self.l = QVBoxLayout()
self.l.addWidget(self.sub_widget)
self.l.setContentsMargins(0,0,0,0)
self.l.setSpacing(0)
self.setLayout(self.l)
def update_data_choice(self, value):
print(value)
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
window = QMainWindow()
window.setCentralWidget(DataDisplay())
window.show()
sys.exit(app.exec_())
我得到这个错误。
QLayout:试图将QLayout "" 添加到DoublePushButton "",它已经有一个布局。
而标签仍然是隐形的。
当我试图将DoublePushbutton封装在一个QFrame中的时候,在init的DoublePushButton类的代码(代替self.setLayout(self.button_layout))。
self.f = QFrame(self.parent())
self.f.setLayout(self.button_layout)
出现标签,但没有按钮...
那么,你知道有什么方法可以让我的TitleData类与DoublePushButton重叠吗?
谢谢你的时间,并对我的英语感到抱歉。