用户档案是用来直观地显示个人数据的。简介中的数据有助于将某些特征与该用户联系起来,并协助其他人更多地了解该个人。根据应用程序的目标,个人资料的信息和外观将发生变化。
用户档案通常有一些参数,这些参数要么是强制性的,要么是可选的,并允许某种程度的定制,以适应用户的喜好,如档案图片或背景颜色。它们中的许多都包含类似的功能,如用户的名字或 "关于 "部分。
用户档案的上半部分我们用QLabel部件实现用户图像的存放,下半部分使用多个QLabel部件存放用户的相关信息资料等。
本次程序在上一篇中进行修改,在创建setUpMainWindow()方法之前,我们先创建一个独立的方法createImageLabels()去加载不同的图片以及创建QLabel对象去显示对应的图片。
images列表包含了具体的文件位置,这些文件将被用于蓝色背景和窗口顶部的用户简介图像。使用for循环,遍历列表中的项目,为每个项目创建一个QLabel对象,实例化一个QPixmap对象,为标签设置pixmap,如果该图像是个人资料图像,则使用move()将其置于窗口的中心。使用move()和绝对定位,你可以很容易地将图像重叠起来,但你需要按照从最下面的图像到最上面的图像的顺序加载图像。
接下来,我们就可以创建MainWindow下的setUpMainWindow() 方法,并调用之前创建的createImageLabels()方法。
在图像标签被创建后,几个用于显示文本的QLabel对象被实例化。例如,user_label在窗口中使用setText()显示用户的名字。你可以用setFont()方法来设置QLabel部件的字体。请确保传递一个QFont对象并指定字体的类型和大小。然后用move()方法将user_label放在窗口的中心。其他的标签也是以类似的方式创建的。
完整程序展示如下
# user_profile.py
# Import necessary modules
import sys
from PyQt6.QtWidgets import QApplication, QWidget, QLabel
from PyQt6.QtGui import QFont, QPixmap
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.initializeUI()
def createImageLabels(self):
"""Open image files and create image labels."""
images = ["images/skyblue.png",
"images/profile_image.png"]
for image in images:
try:
with open(image):
label = QLabel(self)
pixmap = QPixmap(image)
label.setPixmap(pixmap)
if image == "images/profile_image.png":
label.move(80, 20)
except FileNotFoundError as error:
print(f"Image not found.\nError: {error}")
def setUpMainWindow(self):
"""Create the labels to be displayed in the windows."""
self.createImageLabels()
user_label = QLabel(self)
user_label.setText("John Doe")
user_label.setFont(QFont("Arial", 20))
user_label.move(85, 140)
bio_label = QLabel(self)
bio_label.setText("Biography")
bio_label.setFont(QFont("Arial", 17))
bio_label.move(15, 170)
about_label = QLabel(self)
about_label.setText("I'm a Software Engineer with 10 years\
experience creating awsome code.")
about_label.setWordWrap(True)
about_label.move(15, 190)
skills_label = QLabel(self)
skills_label.setText("Skills")
skills_label.setFont(QFont("Arial", 17))
skills_label.move(15, 240)
languages_label = QLabel(self)
languages_label.setText("Python | PHP | SQL | JavaScript")
languages_label.move(15, 260)
experience_label = QLabel(self)
experience_label.setText("Experience")
experience_label.setFont(QFont("Arial", 17))
experience_label.move(15, 290)
developer_label = QLabel(self)
developer_label.setText("Python Developer")
developer_label.move(15, 310)
dev_dates_label = QLabel(self)
dev_dates_label.setText("May 2019 - Present")
dev_dates_label.setFont(QFont("Arial", 10))
dev_dates_label.move(15, 330)
driver_label = QLabel(self)
driver_label.setText("Pizza Delivery Driver")
driver_label.move(15, 350)
driver_dates_label = QLabel(self)
driver_dates_label.setText("Aug 2015 - Dec 2018")
driver_dates_label.setFont(QFont("Arial", 10))
driver_dates_label.move(15, 370)
def initializeUI(self):
"""Set up the application's GUI."""
self.setGeometry(50, 50, 250, 400)
self.setWindowTitle("User Profile GUI")
self.setUpMainWindow()
self.show()
# Run program
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
sys.exit(app.exec())
结果图展示如下:
总结
在本章中,我们发现了如何在GUI窗口中添加和安排部件。QLabel widget是一个基本类,它不仅可以显示文本,还可以和其他PyQt类一起使用,比如显示图片的QPixmap或改变标签文本样式或大小的QFont。每一个PyQt类都包括各种方法来扩展其功能和外观。
在下一章,我们将探讨一些不同的部件类,包括QPushButton和QLineEdit,它们将允许用户与你开发的应用程序进行交互。