кнопка, перекрывающая текст флажка - PullRequest
2 голосов
/ 20 января 2020

Я пытаюсь закодировать в 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

Здесь с гораздо меньшим текстом У меня нет проблемы перекрытия. Он появляется только в том случае, если мы заменим ярлык последнего флажка более длинной строкой.

1 Ответ

2 голосов
/ 20 января 2020

То, что хочет ОП, может быть получено от многих в зависимости от того, как он хочет, чтобы геометрия элементов вела себя при изменении размера окна. Так как нет больше ограничений, чем изображение, которое он показывает, оно предоставит возможное решение, используя 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...