【问题标题】:Why does the label not fully display?为什么标签没有完全显示?
【发布时间】:2020-04-21 06:03:56
【问题描述】:

我正在学习如何使用 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()

【问题讨论】:

  • 尝试在label.move(50,50) 行之前添加label.adjust()...

标签: python pyqt pyqt5 qlabel


【解决方案1】:

QLabel 根据(可能的)父布局管理器调整其内容,但您没有使用任何内容,因此它不知道如何正确显示自己或调整其大小来做到这一点。

最简单的解决方案是调用label.adjustSize(),这将导致标签自身调整大小,以便能够显示其内容。

不过,这不是一个好主意:您正在尝试为小部件使用固定位置(由于很多原因,这通常被认为是一件坏事);结果将是,如果标签文本太大并且用户调整窗口大小,文本将不会完全可见,标签也不知道如何调整大小或最终包装其内容以确保所有显示其文本。

更好的方法是使用layout manager,但这是为更简单的小部件(如QWidget或QDialog)保留的解决方案;一个 QMainWindow doesn't work like that,它需要一个central widget to be set 来确保其内容正确显示和管理。

在您的情况下,您可以简单地使用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)

    # ...

【讨论】:

  • 我收到一条错误消息,指出“QWidget”未定义。我认为这是一个错字,所以我尝试了“QWidgets”并得到了同样的错误。
  • QWidget 是 PyQt5.QtWidgets 的一部分,是 Qt 使用的 all 小部件的基类。更加小心不要混合导入“样式”。您应该使用 from PyQt5 import QtWidgets, ... 或像使用 from PyQt5.QtWidgets import QApplication, QMainWindow 一样导入单个类,但是对于后者,您必须在每次需要一个尚未指定的类时手动将每个类添加到导入语句中。
  • 有效!整个标签现在显示!非常感谢。
猜你喜欢
  • 2019-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-05
  • 1970-01-01
  • 2019-04-28
  • 1970-01-01
相关资源
最近更新 更多