PyQt5 QPushButton

#python #pyqt5

#python #pyqt5

Вопрос:

Я хочу, чтобы кнопка Pushbutton показывала мне текст, подобный этому 1. Вы нажали 2 кнопки не в одной строке.

 from PyQt5 import QtCore, QtGui, QtWidgets
import sys

Class Ui_MainWindow (object):

    def setupUi(self, MainWindow): 
        MainWindow.resize(506, 312) 
        self.centralwidget = QtWidgets.QWidget(MainWindow) 
        
        # adding pushbutton 
        self.pushButton = QtWidgets.QPushButton(self.centralwidget) 
        self.pushButton.setGeometry(QtCore.QRect(200, 150, 93, 28)) 

        # adding signal and slot 
        self.pushButton.clicked.connect(self.changelabeltext) 
    
        self.label = QtWidgets.QLabel(self.centralwidget) 
        self.label.setGeometry(QtCore.QRect(140, 90, 221, 20))   

        # keeping the text of label empty before button get clicked 
        self.label.setText("")   
        
        MainWindow.setCentralWidget(self.centralwidget) 
        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", "Push Button")) 
        
    def changelabeltext(self): 

        # changing the text of label after button get clicked 
        self.label.setText("You clicked PushButton")     

        # Hiding pushbutton from the main window 
        # after button get clicked. 
        self.pushButton.hide() 

If __name__ == "__main__":
    app = QtWidgets.QApplication (sys.argv)
    
    MainWindow = QtWidgets.QMainWindow() 
    ui = Ui_MainWindow() 
    ui.setupUi(MainWindow) 
    MainWindow.show() 

    sys.exit(app.exec_()) 
 

введите описание изображения здесь

введите описание изображения здесь

Комментарии:

1. Привет, Али, не могли бы вы уточнить форматирование текста / кнопки, что в настоящее время с ним не так? Они не находятся в одной строке.

Ответ №1:

если я вас правильно понял, вы хотите, чтобы текст отображался следующим образом:
You clicked
PushButton
Чтобы добиться этого, попробуйте поместить символ новой строки между словами следующим образом:
"You clicked nPushButton"

В качестве альтернативы, если это отображается неправильно, попробуйте добавить новую метку со второй половиной текста или увеличить размер прямоугольника, в который вы поместили текст.

Комментарии:

1. Хотя это помещает текст «Кнопки» в новую строку, поскольку он поместил текст внутри a QRect со статическим размером, большая часть текста будет обрезана

Ответ №2:

Хотя технически вы только спросили, как разместить «Вы нажали» под «Кнопкой» (что можно сделать, введя новую строку в строку "You clicked nPushButton" ), когда вы сделаете это, вы столкнетесь с другой фундаментальной проблемой с вашим кодом, главным образом в том, что вы позиционируете виджеты, рисуя их внутри a QRect со статическим положением.

Это вызовет проблемы при изменении размера текста или окна, поскольку вам придется вручную изменять координаты объекта QRect , чтобы затем разместить его в правильном положении.

Я взял на себя смелость переписать ваши setupUi макеты для использования (которые я рекомендую вам изучить) вместо QRect ‘s. Надеюсь, это поможет, это должно быть заменой:

     def setupUi(self, MainWindow): 
        MainWindow.resize(506, 312) 
        self.mainWidget = QtWidgets.QWidget(MainWindow) 

        self.pushButton = QtWidgets.QPushButton()
        self.pushButton.clicked.connect(self.changelabeltext) 
    
        self.label = QtWidgets.QLabel() 
        self.label.setText("")   

        self.hbox = QtWidgets.QHBoxLayout()
        self.hbox.addWidget(self.pushButton)
        self.hbox.addWidget(self.label)

        self.vbox = QtWidgets.QVBoxLayout()
        self.vbox.addLayout(self.hbox)

        self.hbox.setAlignment(QtCore.Qt.AlignCenter)
        self.vbox.setAlignment(QtCore.Qt.AlignCenter)

        self.mainWidget.setLayout(self.vbox)
        MainWindow.setCentralWidget(self.mainWidget) 
        self.retranslateUi(MainWindow) 
        QtCore.QMetaObject.connectSlotsByName(MainWindow) 

 

Комментарии:

1. Обратите внимание, что, хотя возражение по поводу использования фиксированных геометрий является правильным, метка может быть должным образом обновлена для отображения полного содержимого с помощью вызова adjustSize() .