Как зарезервировать место для скрытого QtWaitingSpinner в QGridLayout? - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь создать приложение QtGui, которое использует найденный здесь QtWaitingSpinner: https://github.com/z3ntu/QtWaitingSpinner. У меня есть это в QGridLayout.Тем не менее, это означает, что кнопка рядом с ней меняет размер, когда прядильщик невидим и запущен.Как зарезервировать правильное количество места для счетчика в сетке, чтобы кнопка рядом с ней оставалась неизменной, независимо от того, отображается ли счетчик?

На основе этого сообщения стекопотока Какиспользуйте проставки в Qt , я подозреваю, что ответ включает QSpacerItem.Однако я не могу понять, как измерить QSpacerItem в зависимости от размера, который понадобится спиннеру.

Вот минимальный пример кода, демонстрирующий мою проблему:

import PyQt5.QtWidgets as QWidgets
import PyQt5.QtCore as QtCore
import PyQt5.QtGui as QtGui
from waitingspinnerwidget import QtWaitingSpinner
import sys

class Example_Window(QWidgets.QWidget):
    def __init__(self):
        super(QWidgets.QWidget,self).__init__()
        self.initUI()

    def initUI(self):
        self.button=QWidgets.QPushButton("Start/Stop Spinner")
        self.button.clicked.connect(self.toggle_spinner)
        self.spinner = QtWaitingSpinner(self,centerOnParent=False)
        self.grid = QWidgets.QGridLayout()
        self.grid.addWidget(self.button,0,0)
        self.grid.addWidget(self.spinner,0,1)
        self.setLayout(self.grid)
        self.show()

    def toggle_spinner(self):
        if self.spinner.isSpinning():
            self.spinner.stop()
        else:
            self.spinner.start()

if __name__ == '__main__':
    app = QWidgets.QApplication([])
    main = Example_Window()
    sys.exit(app.exec())    

1 Ответ

0 голосов
/ 12 февраля 2019

Попробуйте:

import PyQt5.QtWidgets as QWidgets
import PyQt5.QtCore as QtCore
import PyQt5.QtGui as QtGui
from waitingspinnerwidget import QtWaitingSpinner
import sys

class Example_Window(QWidgets.QWidget):
    def __init__(self):
        super(QWidgets.QWidget,self).__init__()

        self.initUI()

    def initUI(self):
        self.button = QWidgets.QPushButton("Start Spinner") # +
        self.button.clicked.connect(self.toggle_spinner)

        self.spinner = QtWaitingSpinner(self, centerOnParent=False)

        self.grid = QWidgets.QGridLayout()
        self.grid.addWidget(self.button, 0, 0)

#        self.grid.addWidget(self.spinner,0,1)        # ---
        self.grid.addWidget(self.spinner, 0, 1, 1, 2) # +++    <---

        self.setLayout(self.grid)
        self.show()

    def toggle_spinner(self):
        if self.spinner.isSpinning():
            self.spinner.stop()
            self.button.setText("Start Spinner") # +
        else:
            self.spinner.start()
            self.button.setText("Stop Spinner")  # +

if __name__ == '__main__':
    app = QWidgets.QApplication([])
    main = Example_Window()
    main.resize(170, 70)                               # +++
    sys.exit(app.exec())    

enter image description here

...