相关文章推荐
侠义非凡的菠菜  ·  Python pandas ...·  4 天前    · 
侠义非凡的菠菜  ·  rc-form源码浅析 - ·  7 月前    · 
侠义非凡的菠菜  ·  Configuring HTTP ...·  10 月前    · 
聪明的作业本  ·  Advanced query ...·  1小时前    · 
失望的鸡蛋面  ·  "Microsoft Outlook ...·  1小时前    · 
坚强的柿子  ·  mongodb 多表关联处理 : ...·  1小时前    · 
不爱学习的火腿肠  ·  java ...·  3 小时前    · 
旅行中的铁链  ·  错误信息:SSL ShakeHand ...·  3 小时前    · 
憨厚的金鱼  ·  Scanpy数据结构:AnnData - 何帅 ·  3 小时前    · 
from PyQt5.QtWidgets import QApplication, QWidget if __name__ == "__main__": app = QApplication(sys.argv) w = QWidget() w.resize(300,300) w.setWindowTitle(‘Guru99’) w.show() sys.exit(app.exec_())

将其另存为app.py(名称无关紧要),然后按F5键运行该程序。 或者,只需双击保存的文件以启动该应用程序。 如果您已正确完成所有操作,则将打开一个标题为Guru99的新窗口,如下所示。

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QMessageBox
def dialog():
    mbox = QMessageBox()
    mbox.setText("Your allegiance has been noted")
    mbox.setDetailedText("You are now a disciple and subject of the all-knowing Guru")
    mbox.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
    mbox.exec_()
if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = QWidget()
    w.resize(300,300)
    w.setWindowTitle('Guru99')
    label = QLabel(w)
    label.setText("Behold the Guru, Guru99")
    label.move(100,130)
    label.show()
    btn = QPushButton(w)
    btn.setText('Beheld')
    btn.move(110,150)
    btn.show()
    btn.clicked.connect(dialog)
    w.show()
    sys.exit(app.exec_())

将文件另存为appone.py或任何您喜欢的文件,然后按F5键运行该程序。 如果您没有犯任何错误,则IDLE将打开一个包含一些文本和按钮的新窗口,如下所示。

mbox.setText("Your allegiance has been noted") mbox.setDetailedText("You are now a disciple and subject of the all-knowing Guru") mbox.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel) mbox.exec_()

在这里,您定义了一个名为dialog的方法,该方法创建一个消息框小部件并为按钮和其他字段设置一些文本。

在特定窗口小部件(在本例中为btn PushButton)中按下按钮时,将从程序的主块中调用dialog方法。 该按钮上触发的click事件导致该函数执行。 这种函数在Qt中称为插槽,您将在接下来的段落中了解有关信号和插槽的更多信息。

if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = QWidget()
    w.resize(300,300)
    w.setWindowTitle('Guru99')

这是应用程序的主要部分,就像前面的示例一样,您首先创建一个QApplication实例,然后创建一个简单的小部件,即QWidget实例。

    label = QLabel(w)
    btn = QPushButton(w)

您在此应用程序中添加了两个新的小部件:QLabel和QPushButton。 QLabel用于在窗口小部件内打印不可编辑的文本或占位符,而QPushButton用于创建可单击的按钮。

这里要注意的关键是,当您创建标签和btn对象时,您要将窗口对象(w)传递给QLabel和QPushButton的构造函数。 这就是在PyQt5中嵌套工作的方式。 要在另一个小部件内创建一个小部件,请将父小部件的引用传递给子级的构造函数。

label.move(100,130)
btn.move(110,150)

move()用于设置小部件相对于其父小部件的位置。 在第一种情况下,标签将从窗口的左侧移动100px,从顶部移动130px。

同样,该按钮将位于窗口左侧110px和顶部150px。 这个例子是实现布局的粗略方法,通常不用于生产中。 它仅出于学习目的而包含在此处。 Qt支持不同的布局,您将在本教程的后续部分中详细了解。

btn.clicked.connect(dialog)

最后,这是Qt中信号和时隙的示例。 在基于GUI的应用程序中,函数是基于用户执行的操作执行的,例如,将鼠标悬停在元素上或单击按钮。 这些动作称为事件。 回想一下app.exec_()方法将控制权转移到Qt事件循环。 这就是事件循环的用途:侦听事件并执行响应操作。

每当发生事件时,例如用户单击按钮,相应的Qt小部件都会发出信号。 这些信号可以连接到python函数(例如本示例中的dialog函数),以便在触发信号时执行该函数。 这些函数在Qt术语中称为 slots 插槽。

随后,响应事件信号触发插槽函数的基本语法如下

widget.signal.connect(slot) 

这意味着只要小部件触发了信号,就会执行连接的插槽函数。 总之,Qt使用信号和插槽在对象之间进行通信,并促进组件的可重用性和交互性。

既然您知道如何嵌套小部件并使用信号和插槽实现交互,下面列出了可以在PyQt应用程序中使用的有用小部件和其他类。

组件和小部件

PyQt中提供了大量用于创建GUI应用程序的小部件。 但是,使用PyQt5,将类重新转换为许可证中的不同模块和修订版。

因此,对PyQt5的结构有一个高层次的了解至关重要。 在本节中,您将了解PyQt5的内部组织方式,并了解PyQt5提供的不同模块,库和API类。

PyQt5目录结构

  • Qt:它将下面提到的所有类/模块组合到一个模块中。它大大增加了应用程序使用的内存。但是,仅导入一个模块就更易于管理框架。
  • QtCore:包含其他模块使用的核心非图形类。这是实现Qt事件循环,信号和插槽连接性等的地方。
  • QtWidgets:包含Pyqt5中可用的大多数小部件。
  • QtGui:包含GUI组件并扩展了QtCore模块。
  • QtNetwork:包含用于通过Qt实现网络编程的类。它支持TCP服务器,TCP套接字,UDP套接字,SSL处理,网络会话和DNS查找。
  • QtMultimedia提供了底层多媒体函数。
  • QtSql:实现SQL数据库的数据库集成。支持ODBC,MySQL,Oracle,SQLite和PostgreSQL。

PyQt5小部件

这是PyQt5中最常用的小部件的列表

QLineEdit:这是一个输入字段,允许用户输入一行文本。

line = QLineEdit()

QRadioButton:这是带有可选按钮的输入字段,类似于html中的单选按钮。

rad = QRadioButton("button title")
rad.setChecked(True)  #to select the button by default.

QComboBox:用于显示带有可选项目列表的下拉菜单。

drop = QComboBox(w)
drop.addItems(["item one", "item two", "item three"])

QCheckBox:类似于标签单选按钮,在标签前面显示一个可选的方框,如果选中该方框,将其选中。

check = QCheckBox("button title")

QMenuBar:在窗口顶部显示水平菜单栏。 您只能将QMenu类的对象添加到此栏中。 这些QMenu对象可以进一步包含字符串,QAction对象或其他QMenu对象。

QToolBar:它是一个水平栏或窗格,可以在窗口内移动。 它可能包含按钮和其他小部件。

QTab:用于将窗口的内容分为多个页面,可以通过小部件顶部的不同选项卡进行访问。 它由两部分组成:标签栏和标签页。

QScrollBar:用于创建滚动条,允许用户在窗口中向上和向下滚动。 它由一个可移动的滑块,一个滑块轨道以及两个用于向上或向下滚动滑块的按钮组成。

scroll = QScrollBar()

QSplitter:分隔符用于分隔窗口的内容,以便将小部件正确地分组并且不会显得混乱。 QSplitter是PyQt5中可用的主要布局处理程序之一,用于水平和垂直拆分内容。

QDock:停靠小部件是具有两个属性的子窗口:

可以在主窗口中移动它,

可以将其停靠在父窗口之外,并将其停靠在屏幕上的其他位置。

布局和主题

在前面的示例中,您仅使用过move()和resize()方法来设置小部件在GUI中的位置。

但是,PyQt具有强大的布局管理引擎,可用于为应用程序创建高级用户界面。 在本节中,您将了解Qt中用于创建和管理布局的两个重要类。

  • QBoxLayout
  • QGridLayout

QBoxLayout

QBoxLayout用于在水平或垂直行中对齐布局的子窗口小部件。 从QBoxLayout继承的两个感兴趣的类是:

QHBoxLayout:用于水平排列子小部件。

QVBoxLayout:用于垂直排列子小部件。

例如,这就是与QHBoxLayout对齐的三个按钮的外观。

grid = QGridLayout(w) grid.addWidget(QPushButton("Button one"),0,0) grid.addWidget(QPushButton("Button two"),0,1) grid.addWidget(QPushButton("Button three"),1,0) grid.addWidget(QPushButton("Button four"),1,1) w.show() sys.exit(app.exec_())

网格将如下所示:

qp = QPalette() qp.setColor(QPalette.ButtonText, Qt.black) qp.setColor(QPalette.Window, Qt.black) qp.setColor(QPalette.Button, Qt.gray) app.setPalette(qp) w = QWidget() grid = QGridLayout(w) grid.addWidget(QPushButton("Button one"),0,0) grid.addWidget(QPushButton("Button two"),0,1) grid.addWidget(QPushButton("Button three"),1,0) grid.addWidget(QPushButton("Button four"),1,1) w.show() sys.exit(app.exec_())
 
推荐文章