AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / Perguntas / 78863093
Accepted
sdbbs
sdbbs
Asked: 2024-08-13 02:16:41 +0800 CST2024-08-13 02:16:41 +0800 CST 2024-08-13 02:16:41 +0800 CST

PyQt5 expande dinamicamente o widget para duas colunas no QGridLayout?

  • 772

O exemplo abaixo, que modifiquei a partir da resposta no widget Pyqt5 em grid expansion , começa assim:

exemplo iniciando GUI

Então, quando você clica no botão Column Cover, a ideia é que o primeiro rótulo "Linha 0, Coluna 0" (destacado em vermelho) se expanda em ambas as colunas do QGridLayout - no entanto, eu entendo o seguinte:

exemplo de GUI após clique

Portanto, parece que as larguras de ambas as colunas da grade foram levadas em consideração, para centralizar o rótulo contornado, o que é bom - porém, o rótulo contornado não se expandiu para ocupar a largura combinada de ambas as colunas.

Como posso expandir a largura do rótulo e ocupar o espaço de ambas as colunas no layout de grade, quando o botão "Capa da coluna" é clicado? Ou seja, eu gostaria de obter isso após o primeiro clique no botão após o início do programa (editado no editor de imagens, a caixa é aproximadamente o que eu acho que é a união das caixas delimitadoras de ambos os rótulos abaixo do descrito).

resultado desejado GUI

.setFixedWidthObserve que estou ciente de que provavelmente poderia fazer isso manipulando MainUi.label- no entanto, estou procurando algum tipo de configuração, onde o rótulo se expandiria automaticamente para preencher a largura disponível, dependendo de ser colocado em uma ou duas colunas do QGridLayout.

O código:

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5 import QtCore, QtGui, QtWidgets

#rom example import Ui_MainWindow
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(191, 136)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName("gridLayout")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setObjectName("pushButton")
        self.gridLayout.addWidget(self.pushButton, 0, 0, 1, 2)
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setObjectName("label_3")
        self.gridLayout.addWidget(self.label_3, 3, 0, 1, 1)
        self.label_4 = QtWidgets.QLabel(self.centralwidget)
        self.label_4.setObjectName("label_4")
        self.gridLayout.addWidget(self.label_4, 2, 1, 1, 1)
        self.label_5 = QtWidgets.QLabel(self.centralwidget)
        self.label_5.setObjectName("label_5")
        self.gridLayout.addWidget(self.label_5, 3, 1, 1, 1)
        self.label_6 = QtWidgets.QLabel(self.centralwidget)
        self.label_6.setObjectName("label_6")
        self.gridLayout.addWidget(self.label_6, 1, 1, 1, 1)
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setObjectName("label")
        self.gridLayout.addWidget(self.label, 1, 0, 1, 1)
        self.label.setStyleSheet("border: 1px solid; border-color:red;")

        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setObjectName("label_2")
        self.gridLayout.addWidget(self.label_2, 2, 0, 1, 1)
        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "Column Cover"))
        self.label_3.setText(_translate("MainWindow", "Row 2, Column 0"))
        self.label_4.setText(_translate("MainWindow", "Row 1, Column 1"))
        self.label_5.setText(_translate("MainWindow", "Row 2, Column 1"))
        self.label_6.setText(_translate("MainWindow", "Row 0, Column 1"))
        self.label.setText(_translate("MainWindow", "Row 0, Column 0"))
        self.label_2.setText(_translate("MainWindow", "Row 1 ,Column 0 "))


class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        QWidget.__init__(self, parent)
        self.MainUi = Ui_MainWindow()
        self.MainUi.setupUi(self)

        self.MainUi.pushButton.setCheckable(True)                           # +++ True
        self.MainUi.pushButton.clicked.connect(self.expand_row)


    def expand_row(self, state):                                            # +++ state
        if state:
            self.MainUi.label_6.hide()
            self.MainUi.gridLayout.addWidget(self.MainUi.label, 1, 0, 1, 2, Qt.AlignHCenter) #  ...2, 1)
        else:
            self.MainUi.gridLayout.addWidget(self.MainUi.label, 1, 0, 1, 1) #  ...1, 1)
            self.MainUi.label_6.show()

#        self.MainUi.gridLayout.setRowStretch(0,1)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    MainWindow = MainWindow()
    MainWindow.setWindowTitle('Example')
    MainWindow.show()
    sys.exit(app.exec_())
python
  • 1 1 respostas
  • 16 Views

1 respostas

  • Voted
  1. Best Answer
    alec
    2024-08-13T03:08:21+08:002024-08-13T03:08:21+08:00

    Defina o sinalizador de alinhamento em QLabel.setAlignmentvez de QLayout.addWidget.

    def expand_row(self, state):                                            # +++ state
        if state:
            self.MainUi.label_6.hide()
            self.MainUi.label.setAlignment(Qt.AlignCenter)
            self.MainUi.gridLayout.addWidget(self.MainUi.label, 1, 0, 1, 2) #  ...2, 1)
    
        else:
            self.MainUi.label.setAlignment(Qt.AlignLeft | Qt.AlignVCenter)
            self.MainUi.gridLayout.addWidget(self.MainUi.label, 1, 0, 1, 1) #  ...1, 1)
            self.MainUi.label_6.show()
    
    • 2

relate perguntas

  • Como divido o loop for em 3 quadros de dados individuais?

  • Como verificar se todas as colunas flutuantes em um Pandas DataFrame são aproximadamente iguais ou próximas

  • Como funciona o "load_dataset", já que não está detectando arquivos de exemplo?

  • Por que a comparação de string pandas.eval() retorna False

  • Python tkinter/ ttkboostrap dateentry não funciona quando no estado somente leitura

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Por que esse código Java simples e pequeno roda 30x mais rápido em todas as JVMs Graal, mas não em nenhuma JVM Oracle?

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Quando devo usar um std::inplace_vector em vez de um std::vector?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Marko Smith

    Estou tentando fazer o jogo pacman usando apenas o módulo Turtle Random e Math

    • 1 respostas
  • Martin Hope
    Aleksandr Dubinsky Por que a correspondência de padrões com o switch no InetAddress falha com 'não cobre todos os valores de entrada possíveis'? 2024-12-23 06:56:21 +0800 CST
  • Martin Hope
    Phillip Borge Por que esse código Java simples e pequeno roda 30x mais rápido em todas as JVMs Graal, mas não em nenhuma JVM Oracle? 2024-12-12 20:46:46 +0800 CST
  • Martin Hope
    Oodini Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores? 2024-12-12 06:27:11 +0800 CST
  • Martin Hope
    sleeptightAnsiC `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso? 2024-11-09 07:18:53 +0800 CST
  • Martin Hope
    The Mad Gamer Quando devo usar um std::inplace_vector em vez de um std::vector? 2024-10-29 23:01:00 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST
  • Martin Hope
    MarkB Por que o GCC gera código que executa condicionalmente uma implementação SIMD? 2024-02-17 06:17:14 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve