PyQt size () возвращает неправильный размер перед отображением виджета? - PullRequest
0 голосов
/ 21 февраля 2019

Я пытаюсь сопоставить размер button1 с button2, проверив размер button1 и затем установив соответствующий размер button2, но size() для button1 возвращает неправильное значение (640, 480), если только я show() это первое.Но если я покажу его до того, как закончу настройку макетов, он будет мерцать на экране, а последующий код будет запущен, а я не хочу.

Как мне обойти это?

Вотминимальный пример:

import sys
from PyQt5 import QtWidgets
from PyQt5.QtCore import QSize
import random

class MyButton(QtWidgets.QPushButton):
    def __init__(self):
        super().__init__("BUTTON1")

    def sizeHint(self):
        return QSize(100,100)

if __name__=='__main__':

    app = QtWidgets.QApplication(sys.argv)

    # Button with sizeHint 100x100
    btn1 = MyButton()

    # There is a chance this button will be sized differently than its sizeHint wants
    if random.randint(0, 1):
        btn1.setFixedHeight(200)

    # This line works if btn1.setFixedHeight was called, but otherwise gives the wrong height of 480px
    height = btn1.size().height()

    # I want btn2 to be the same height as btn1
    btn2 = QtWidgets.QPushButton("BUTTON2")
    btn2.setFixedHeight(height)

    # Boilerplate
    layout = QtWidgets.QHBoxLayout()
    layout.addWidget(btn1)
    layout.addWidget(btn2)
    container = QtWidgets.QWidget()
    container.setLayout(layout)
    container.show()
    sys.exit(app.exec_())

1 Ответ

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

void QWidget :: resize (int w, int h)

Это соответствует изменению размера (QSize (w, h)).Примечание: функция установки для размера свойства.

import sys
from PyQt5 import QtWidgets
from PyQt5.QtCore import QSize
import random

class MyButton(QtWidgets.QPushButton):
    def __init__(self):
        super().__init__("BUTTON1")

    def sizeHint(self):
        return QSize(100, 100)

if __name__=='__main__':

    app = QtWidgets.QApplication(sys.argv)

    # Button with sizeHint 100x100
    btn1 = MyButton()
    btn1.resize(btn1.sizeHint())                            # <========

# There is a chance this button will be sized differently than its sizeHint wants
#    if random.randint(0, 1):
#        btn1.setFixedHeight(200)
#        print("btn1 2->", btn1.size())

    # This line works if btn1.setFixedHeight was called, but otherwise gives the wrong height of 480px
    height = btn1.size().height()

    # I want btn2 to be the same height as btn1
    btn2 = QtWidgets.QPushButton("BUTTON2")
    btn2.setFixedHeight(height)

    # Boilerplate
    layout = QtWidgets.QHBoxLayout()
    layout.addWidget(btn1)
    layout.addWidget(btn2)
    container = QtWidgets.QWidget()
    container.setLayout(layout)
    container.show()
    sys.exit(app.exec_())

enter image description here

...