我正在学习如何使用PyQt5,遇到这样的问题,"我的第一个标签 "在我的屏幕上不能完全显示。
运行代码后显示。
代码:
from PyQt5 import QtWidgets, QtCore, QtGui
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import QApplication, QMainWindow
import sys
QtWidgets.QApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling, True) #enable highdpi scaling
QtWidgets.QApplication.setAttribute(QtCore.Qt.AA_UseHighDpiPixmaps, True) #use highdpi icons
def window():
app = QApplication(sys.argv)
win = QMainWindow()
win = QMainWindow()
win.setGeometry(200, 200, 400, 400)
win.setWindowTitle("Tech with Aeijan")
label = QtWidgets.QLabel(win)
label.setText("my first label!")
label.move(50,50)
win.show()
sys.exit(app.exec_())
window()
QLabel会根据(可能的)父版图管理器自适应其内容,但你没有使用任何父版图管理器,所以它不知道如何正确地显示自己或自适应其大小来做到这一点。
最简单的解决方案是调用 label.adjustSize()
这将导致标签自行调整大小,以便能够显示其内容。
但这并不是一个很好的主意:你正试图为一个小部件使用一个固定的位置(这通常被认为是一件糟糕的事情,原因很多);结果是,如果标签的文本太大,而用户又调整了窗口的大小,那么文本将不会完全可见,标签也不知道如何调整大小或最终包裹其内容以确保所有的文本都被显示。
在 更好 办法是用 排版师但这是一个保留给更简单的小部件(如QWidget或QDialog)的解决方案;一个QMainWindow 不见得它需要一个 中心部件 以确保其内容的正确显示和管理。
在您的情况下,您可以简单地使用 self.setCentralWidget(label)
但这将使您无法在窗口中添加任何其他小组件。
应该使用一个 "容器 "小组件来代替,该小组件将被设置为主窗口的中心小组件;然后你可以为该小组件设置一个布局,并为其添加标签。
def window():
app = QApplication(sys.argv)
win = QMainWindow()
central = QWidget()
win.setCentralWidget(central)
layout = QVBoxLayout()
central.setLayout(layout)
# alternatively, the above is the same as this:
# layout = QVBoxLayout(central)
label = QtWidgets.QLabel(win)
label.setText("my first label!")
layout.addWidget(label)
# ...