按钮重叠复选框文本

2024-06-16 10:15:03 发布

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

我尝试在PyQt中编写一个界面,用户可以在其中选中复选框,然后单击按钮来处理他们的选择。但是,我遇到了一些问题,因为按钮与复选框标签重叠。下面是一个简单的代码,向您展示我的问题:

from PyQt5.QtWidgets import QMainWindow, QApplication, QPushButton, QWidget, QTabWidget, QVBoxLayout, QGridLayout, \
    QCheckBox, QHBoxLayout
import sys


class App(QMainWindow):

    def __init__(self):
        super().__init__()
        self.title = 'PyQt5 tabs - pythonspot.com'
        self.left = 0
        self.top = 0
        self.width = 300
        self.height = 200
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        self.table_widget = MyTableWidget(self)
        self.setCentralWidget(self.table_widget)

        self.show()


class MyTableWidget(QWidget):

    def __init__(self, parent):
        super(QWidget, self).__init__(parent)
        self.layout = QVBoxLayout(self)

        # Initialize tab screen
        self.tabs = QTabWidget()
        self.tab2 = QWidget()
        self.tabs.resize(300, 200)
        self.checkbox_states = {}

        # Add tabs
        self.tabs.addTab(self.tab2, "Tab 2")

        # Create first tab
        self.tab2.layout = QGridLayout()
        checkbox_layout = QVBoxLayout()
        self.checkbox_states["Haar"] = QCheckBox("small")
        self.checkbox_states["db"] = QCheckBox("small")
        self.checkbox_states["sym"] = QCheckBox("small")
        self.checkbox_states["coif"] = QCheckBox("very very very very long")

        for key, l in self.checkbox_states.items():
            l.setChecked(False)
            checkbox_layout.addWidget(l)

        process_button_layout = QHBoxLayout()
        self.process_wavelet = QPushButton("Process")
        process_button_layout.addWidget(self.process_wavelet)
        # QObject.connect(self.process_wavelet, SIGNAL('clicked()'), self._on_process_wavelet)

        self.tab2.layout.addLayout(checkbox_layout, 0, 0, 0, 0)
        self.tab2.layout.addLayout(process_button_layout, 1, 1, 1, 1)
        self.tab2.setLayout(self.tab2.layout)

        # Add tabs to widget
        self.layout.addWidget(self.tabs)
        self.setLayout(self.layout)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())

有人知道我如何抑制这个重叠问题吗?谢谢

编辑:

我想要这样的东西:

enter image description here

这里有一个小得多的文本,我没有重叠的问题。只有将最后一个复选框的标签替换为更长的字符串时,才会显示该复选框


Tags: selfinitsysprocess复选框verylayoutcheckbox
1条回答
网友
1楼 · 发布于 2024-06-16 10:15:03

OP想要什么,可以从许多人那里得到,这取决于他希望在窗口大小改变时元素的几何图形表现如何。因此,由于没有比它显示的图像更多的限制,它将使用QGridLayout提供一个可能的解决方案,其中在第一列中放置QCheckBox,在第二列和最后一个文件中放置QPushButton:

class MyTableWidget(QWidget):
    def __init__(self, parent):
        super(QWidget, self).__init__(parent)
        layout = QVBoxLayout(self)

        self.tabs = QTabWidget()
        self.tabs.resize(300, 200)

        layout.addWidget(self.tabs)

        self.tab2 = QWidget()
        self.tabs.addTab(self.tab2, "Tab 2")

        lay = QGridLayout(self.tab2)

        self.checkbox_states = {}
        for i, (key, text) in enumerate(
            (
                ("Haar", "small"),
                ("db", "small"),
                ("sym", "small"),
                ("coif", "very very very very long"),
            )
        ):
            checkbox = QCheckBox(text)
            checkbox.setChecked(False)
            lay.addWidget(checkbox, i, 0)
            self.checkbox_states[key] = checkbox

        self.process_wavelet = QPushButton("Process")
        lay.addWidget(self.process_wavelet, i, 1)

enter image description here

相关问题 更多 >