#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()
.