编程技术文章分享与教程

网站首页 > 技术文章 正文

PyQt5学习笔记——基本窗口组件(1)

hmc789 2024-11-12 11:41:23 技术文章 2 ℃

PyQt5学习笔记——基本窗口组件(1)

最近在看PyQt5方面的教材,简单整理汇总便于查阅;因为过于简略如果希望于深入的学习还是应该啃书本吧~

  1. QMainWindow 窗口可以包含菜单栏、工具栏、状态栏、标题栏等,是最常见的窗口形式,也可以说是GUI程序的主窗口
  2. QDialog 是对话框窗口的基类。对话框主要用来执行短期任务,或者与用户进行互动,它可以是模态的,也可以是非模态的。
  3. 如果是主窗口,就使用QMainWindow类;如果是对话框,就使用 QDialog类;如果不确定,或者有可能作为顶层窗口,也有可能嵌入到其他窗口中,那么就使用QWidget类。

QMainWindow

QMainWindow继承自QWidget类,拥有它的所有派生方法和属性。

常用方法

QMainWindow不能设置布局(使用setLayout()方法),因为它有自己的布局。


QWidget

基础窗口控件QWidget类是所有用户界面对象的基类,所有的窗口和控件都直接或间接继承自QWidget类。

坐标系统

  • 整个屏幕的坐标系统就用来定位顶层窗口的
  • 在窗口内部也有自己的坐标系统,该坐标系统仍然以左上角作为原点,从左向右为x轴正向,从上向下为y轴正向,原点、x轴、y轴围成的区域叫作Client Area(客户区),在客户区的周围则是标题栏(Window Title)和边框(Frame)。

最简单的窗口

import sys
from PyQt5.QtWidgets import QApplication,QWidget
app=QApplication(sys.argv) # 每一个 PyQt5 程序都需要有一个 QApplication 对象,QApplication 类包含在QTWidgets模块中。sys.argv 是一个命令行参数列表。
window=QWidget()
window.resize(300,200)
window.move(250,150)
window.setWindowTitle('Hello PyQt5')
window.show() # 使用show()方法将窗口控件显示在屏幕上。
sys.exit(app.exec_()) # 最后进入该程序的主循环。事件处理从本行代码开始,主循环接收事件消息并将其分发给程序的各个控件。
  • 窗口和控件都继承自QWidget类,如果不为控件指定一个父对象,那么该控件就会被当作窗口处理
  • 如果调用 exit()或主控件被销毁,主循环就会结束。使用 sys.exit()方法退出可以确保程序完整地结束,在这种情况下系统的环境变量会记录程序是如何退出的。
  • 如果程序运行成功,那么exec_()的返回值为0,否则为非0。

QLabel

QLabel对象作为一个占位符可以显示不可编辑的文本或图片,也可以放置一个GIF 动画,还可以被用作提示标记为其他控件。纯文本、链接或富文本可以显示在标签上。

继承关系

常用方法

常用信号



使用QLabel

from PyQt5.QtWidgets import QApplication,  QLabel  ,QWidget, QVBoxLayout 
from PyQt5.QtCore import Qt 
from PyQt5.QtGui import QPixmap ,QPalette
import sys  
    
class WindowDemo(QWidget):  
    def __init__(self ):  
        super().__init__()
                
        label1 = QLabel(self)
        label2 = QLabel(self)
        label3 = QLabel(self)
        label4 = QLabel(self)
        
        label1.setText("这是一个文本标签。")
        label1.setAutoFillBackground(True) 
        palette = QPalette()   
        palette.setColor(QPalette.Window,Qt.blue)  
        label1.setPalette(palette) 
        label1.setAlignment( Qt.AlignCenter)
          
        label2.setText("<a href='#'>欢迎使用Python GUI 应用</a>")
        
        label3.setAlignment( Qt.AlignCenter)    
        label3.setToolTip('这是一个图片标签')
        label3.setPixmap( QPixmap("./images/python.jpg"))

        label4.setText("<A href='http://www.cnblogs.com/wangshuo1/'>欢迎访问信平的小屋</a>")
        label4.setAlignment( Qt.AlignRight)
        label4.setToolTip('这是一个超链接标签')
        
        vbox = QVBoxLayout()
        vbox.addWidget(label1)
        vbox.addStretch()
        vbox.addWidget(label2)
        vbox.addStretch()
        vbox.addWidget( label3 )
        vbox.addStretch()
        vbox.addWidget( label4)
        
        label1.setOpenExternalLinks(True)
        # 打开允许访问超链接,默认是不允许,需要使用 setOpenExternalLinks(True)允许浏览器访问超链接
        label4.setOpenExternalLinks( False )
        # 点击文本框绑定槽事件  
        label4.linkActivated.connect( link_clicked )
        
        # 划过文本框绑定槽事件       
        label2.linkHovered.connect( link_hovered )
        label1.setTextInteractionFlags( Qt.TextSelectableByMouse )

        self.setLayout(vbox)
        self.setWindowTitle("QLabel 例子")
        
def link_hovered():
    print("当鼠标滑过label-2标签时,触发事件。")
        
def link_clicked():
    print("当鼠标点击label-4标签时,触发事件。" )
  
if __name__ == "__main__":  
    app = QApplication(sys.argv)  
    win = WindowDemo()  
    win.show()  
    sys.exit(app.exec_())

文本框类控件

QLineEdit

QLineEdit类是一个单行文本框控件,可以输入单行字符串。如果需要输入多行字符串,则使用QTextEdit类。

常用方法
常用信号
相关掩码

示例:

其他
  • 在通常情况下,我们会对用户的输入做一些限制,可以通过验证器来进行。常见的验证器有:整型验证器、浮点型验证器及其他自定义验证器。

QTextEdit

QTextEdit类是一个多行文本框控件,可以显示多行文本内容,当文本内容超出控件显示范围时,可以显示水平个垂直滚动条。

常用方法

教材



未完待续

Tags:

标签列表
最新留言