PyQt简介(二)

目录

 

窗口风格

部件继承关系

实例:

窗口布局


窗口风格

在上一节我们已经知道PyQt中所有的部件都可以是顶级窗口用来直接显示,但是通常我们会使用QDialog 或 QMainWindow最为顶级窗口,偶尔会使用QWidget。

由此我们可以看出在PyQt中主要有两种界面风格:

  1. 主窗口风格
  2. 对话框风格

部件继承关系

既然有顶级部件就会有次级部件。PyQt使用父-子拥有权模型,在PyQt中所有的部件都继承于QtWidget类,同时QtWidget类继承与QObject类,这样可以得出一个简单继承关系:

QObject > QtWidget > all widgets

实例:

import sys
from PySide2 import QtCore
from PySide2 import QtWidgets


class Form(QtWidgets.QDialog):

    def __init__(self, parent=None):
        super(Form, self).__init__(parent)
        self.browser = QtWidgets.QTextBrowser()
        self.lineedit = QtWidgets.QLineEdit("Type an expression and press Enter")
        self.lineedit.selectAll()
        layout = QtWidgets.QVBoxLayout()
        layout.addWidget(self.browser)
        layout.addWidget(self.lineedit)
        self.setLayout(layout)
        self.lineedit.setFocus()
        self.connect(self.lineedit, QtCore.SIGNAL("returnPressed()"),
                     self.updateUi)
        self.setWindowTitle("Calculate")

    def updateUi(self):
        try:
            text = unicode(self.lineedit.text())
            self.browser.append("%s = <b>%s</b>" % (text, eval(text)))
        except:
            self.browser.append(
                    "<font color=red>%s is invalid!</font>" % text)


app = QtWidgets.QApplication(sys.argv)
form = Form()
form.show()
app.exec_()

运行结果:

            

这个程序在下面输入一些运算表达式后按回车,上面会显示相应的结果。

上面Form继承了QDialog类,QDialog派生的类具有一些特定的方法,例如点击x或Esc键关闭窗口。

__init__()方法中有一个parent参数,用来指定父类,然后使用super方法初始化它。在PyQt中当一个部件没有父类时,他就会被指定为顶级部件。这里Form的parent参数是None,那么它就成了顶级部件。

两个部件类型QTextBrowser和QLineEdit,分别是只读多文本框和单行文本框。

selectAll()选择所有文本,setFocus()方法用来固定光标。

connect()用来关联信号,信号槽和响应方法。

最后使用setWindowTitle()设置标题

窗口布局

设置部件的位置和大小主要有三种方法:

  1. 使用resize()、 move()等方法直接设置。
  2. 重写resizeEvent() 等事件进行动态设置。
  3. 使用布局管理器。

使用布局管理器是比较常用的方法,也可以结合这些方法一同使用。

常用的布局管理器有三种:

  1. 垂直布局
  2. 水平布局
  3. 网格布局

在PyQt中布局决定父子关系,在上面的例子中虽然QTextBrowser和QLineEdit没有设置parent参数,但是通过布局设置后它们都从属布局管理器,而布局管理器又从属Form类,所以当我们关闭顶级窗口时,它的所有子部件都会依次关闭。

猜你喜欢

转载自blog.csdn.net/xiaoqiao11770/article/details/82016774
今日推荐