В PyQt5 обрезается Label
Есть окно, созданное с помощью PyQt5, в котором есть Label, установленный так:
def setupUi(self, MainWindow):
...
self.label1 = QtWidgets.QLabel(self.centralwidget)
self.label1.setGeometry(QtCore.QRect(50,10,10,10))
self.label1.setObjectName("label1")
self.label1.setFont(QtGui.QFont('Arial', 10))
...
def retranslateUi(self, MainWindow):
...
self.label1.setText(_translate("MainWindow", "Website/App"))
При запуске программы вместо "Website/App" выводится "Website/", а если сместить Label правее, то текст вообще не отображается.
Загуглив, я увидел, что решение везде одно - добавить метод:
def update(self):
self.label1.adjustSize()
и вызывать его в методе rentranslateUi /при нажатии некоторых кнопок/ и тд.
Решение с adjustSize() мне не помогло.
Минимальный воспроизводимый пример:
from sys import argv
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(QtWidgets.QMainWindow):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(500, 250)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label1 = QtWidgets.QLabel(self.centralwidget)
self.label1.setGeometry(QtCore.QRect(50,10,10,10))
self.label1.setObjectName("label1")
self.label1.setFont(QtGui.QFont('Arial', 10))
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "Password
Manager"))
self.label1.setText(_translate("MainWindow", "Website/App"))
self.update()
def update(self):
self.label1.adjustSize()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
uiMainWindow = Ui_MainWindow()
uiMainWindow.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
Я не знаю, как поправить код, чтобы он заработал.
Подскажите, буду очень признателен.
Ответы (1 шт):
НИКОГДА Не изменяйте код, сгенерированный Qt Designer. НИКОГДА!
Создайте другой класс, который наследуется от соответствующего виджета, и используйте созданный класс для его заполнения.
Вам надо освоить менеджеры компоновки. Layout Management
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object): # (QtWidgets.QMainWindow):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(500, 250)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label1 = QtWidgets.QLabel(self.centralwidget)
self.label1.setGeometry(QtCore.QRect(50,10,10,10))
self.label1.setObjectName("label1")
self.label1.setFont(QtGui.QFont('Arial', 10))
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "Password Manager"))
self.label1.setText(_translate("MainWindow", "Website/App"))
# self.update()
# def update(self):
# self.label1.adjustSize()
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
layout = QtWidgets.QVBoxLayout(self.centralwidget)
layout.addWidget(self.label1)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
# MainWindow = QtWidgets.QMainWindow()
# uiMainWindow = Ui_MainWindow()
# uiMainWindow.setupUi(MainWindow)
# MainWindow.show()
w = MainWindow()
w.show()
sys.exit(app.exec_())
