单行文本和多行文本

PyQt中提供了单行文本框和多行文本框。使用QtGui.QLineEdit可以创建单行文本框。使用QtGui.QTextEdit可以创建多行文本框。

单行文本框

使用QtGui.QLineEdit可以创建单行文本框,通过修改其属性可以将其设置为密码框。当创建单行文本后,可以使用以下的方法设置文本框的属性或对文本框中的内容进行操作。

  • clear() :清除文本框中的内容
  • contextMenuEvent: 右键菜单事件
  • copy(): 复制文本框中的内容
  • cut(): 剪切文本框中的内容
  • paste(): 向文本框中粘贴内容
  • redo(): 重做
  • selectAll(): 全选
  • selectedText(): 获取选中的文本
  • setAlignment(): 设置文本对齐方式
  • setEchoMode: 设置文本框类型
  • setMaxLength():设置文本框中最大字符数
  • setText():设置文本框中的文字
  • undo(): 撤销

下面的例子,创建一个单行文本框和密码框

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/usr/bin/env python
# - coding=utf-8 
import sys
from PyQt4 import QtGui, QtCore

class Window(QtGui.QWidget):

    def __init__(self):
        super(Window, self).__init__()
        self.setWindowTitle("Lpb-i")
        self.resize(300,200)

        gridlayout = QtGui.QGridLayout() # 创建布局组件

        str = u'开始测试'
        label1 = QtGui.QLabel(str)     # 创建标签
        label1.setAlignment(QtCore.Qt.AlignCenter)  # 设置标签样式
        gridlayout.addWidget(label1, 0, 0)
        edit1 = QtGui.QLineEdit()      # 创建单行文本框
        gridlayout.addWidget(edit1, 1, 0)

        label2 = QtGui.QLabel('password')
        label2.setAlignment(QtCore.Qt.AlignCenter)
        gridlayout.addWidget(label2, 1, 0)
        edit2 = QtGui.QLineEdit()
        edit2.setEchoMode(QtGui.QLineEdit.Password) # 将其设置为密码框
        gridlayout.addWidget(edit2, 3, 0)
        self.setLayout(gridlayout)

app = QtGui.QApplication(sys.argv)
window = Window()
window.show()
app.exec_()

运行效果

多行文本

使用QtGui.QTextEdit可以创建多行文本框。以下方法可以用作文本框属性或文本框内容的设置。

  • append(): 向文本框追加内容
  • clear(): 清除文本框中的内容
  • contextMenuEvent():右键菜单事件
  • copy(): 复制文本框中的内容
  • cut(): 剪切文本框中的内容
  • find(): 查找文本
  • paste(): 向文本框中粘贴内容
  • redo(): 重做
  • selectAll(): 全选
  • selectedText(): 获取选中的文本
  • setAlignment():设置文本对齐方式
  • setText(): 设置文本框中的文字
  • undo(): 撤销

多行文本示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import sys
from PyQt4 import QtCore, QtGui

class MyWindow(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.setWindowTitle('PyQt')
        self.resize(300,200)
        gridlayout = QtGui.QGridLayout()
        label = QtGui.QLabel('TextEdit') # 设置标签
        label.setAlignment(QtCore.Qt.AlignCenter)
        gridlayout.addWidget(label, 0, 0)
        edit = QtGui.QTextEdit()            # 创建多行文本
        edit.setText('Python\nPyQt')        # 设置文本框中的文字
        gridlayout.addWidget(edit, 1, 0)
        self.setLayout(gridlayout)
app = QtGui.QApplication(sys.argv)
mywindow = MyWindow()
mywindow.show()
app.exec_()~

运行效果:

单选和复选框

使用QtGui.QRadioButton可以创建单选框,使用QtGui.QCheckBox可以创建复选框。单元框和复选框都可以通过setChecked()设置状态,通过isChecked()获取状态。

下面是创建一组单选框和复选框的例子

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/usr/bin/env python
# *-* coding=utf-8 *-*
import sys
from PyQt4 import QtGui, QtCore

class Window(QtGui.QWidget):

    def __init__(self):
        super(Window, self).__init__()
        self.setWindowTitle("Lpb_i")
        self.resize(400, 600)
        gridlayout = QtGui.QGridLayout()   # 创建布局组件

        self.label1 = QtGui.QLabel('Label1')   # 创建标签
        self.label2 = QtGui.QLabel('Label2')
        self.label3 = QtGui.QLabel('Label3')
        gridlayout.addWidget(self.label1, 1, 2) #添加标签到组件
        gridlayout.addWidget(self.label2, 2, 2)
        gridlayout.addWidget(self.label3, 3, 2)

        self.radio1 = QtGui.QRadioButton("spec2000") #创建单选框
        self.radio2 = QtGui.QRadioButton("stream")
        self.radio3 = QtGui.QRadioButton("unixbench")
        self.radio1.setChecked(True)    #将Radio1默认选中

        gridlayout.addWidget(self.radio1, 1, 1)  # 添加单选框
        gridlayout.addWidget(self.radio2, 2, 1)
        gridlayout.addWidget(self.radio3, 3, 1)

        self.check = QtGui.QCheckBox('All')  # 创建复选框
        self.check.setChecked(False)                  # 将复选框默认未选中
        gridlayout.addWidget(self.check, 4, 1) # 添加复选框到布局组件

        self.button = QtGui.QPushButton('start Test') # 创建按钮
        gridlayout.addWidget(self.button, 5,1,1,2) # 添加按钮到布局组件
        self.setLayout(gridlayout)    # 添加布局组件到窗口

        self.connect(self.button,    # 按钮事件
            QtCore.SIGNAL('clicked()'),
            self.OnButton)

    def OnButton(self):   # 按钮信号槽函数
        if self.radio1.isChecked():   # 判断单选按钮是否被选中
            print("stream test start")
            self.label1.setText('stream')

        elif self.radio2.isChecked():
            print("spec2000 test start")
            self.label2.setText('spec2000')
        else:
            print("unixbench test1 start")
            self.label3.setText('unixbench')
        if self.check.isChecked():      #  判断复选按钮是否选中
            self.label1.setText('stream')
            self.label2.setText('spec2000')
            self.label3.setText('unixbench')
app = QtGui.QApplication(sys.argv)
win = Window()
win.show()
app.exec_()

运行效果

菜单项

PyQt中可以使用QMenuBar创建菜单条,使用QMenu创建菜单。菜单单击事件也可以像按钮事件一样通过信号/插槽的形式绑定到类的方法中。

创建菜单

当使用QMenuBar创建菜单条后,可以使用其addMenu方法向其中添加菜单。然后通过菜单的addAction方法向菜单中添加菜单命令。对于QtGui.QMainWindow可以直接使用其menuBar方法获得菜单条,无需使用QMenuBar创建菜单条。

下面的例子创建了一组菜单

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#!/usr/bin/env python
#*-* coding=utf-8 *-*

import sys
from PyQt4 import QtGui, QtCore

class Window(QtGui.QMainWindow):

    def __init__(self):
        super(Window, self).__init__()
        self.setWindowTitle("Lpb-i")
        self.resize(300,400)

        menubar = self.menuBar()  # 获得窗口的菜单条
        file = menubar.addMenu('&File') # 添加File菜单
        file.addAction('Open') # 添加Open命令
        file.addAction('Save')  # 添加save命令
        file.addSeparator()   # 添加分隔符

file.addAction('Close') # 添加close命令       edit = menubar.addMenu('&Edit') # 添加Edit菜单       edit.addAction('Copy') # 添加copy命令       edit.addAction('Paste') # 添加Paste命令       edit.addAction('Cut') # 添加cut命令 edit.addAction('SelectAll') # 添加selectall命令 help = menubar.addMenu('&Help') # 添加help菜单 help.addAction('About') # 创建MyWindow对象

app = QtGui.QApplication(sys.argv)
win = Window()
win.show()
app.exec_()

运行效果:

菜单事件

菜单事件和按钮事件的处理方式相同,均使用connect方法将信号绑定到插槽事件处理函数上。不同的是,菜单事件需要绑定其"triggered()"信号。

下面是菜单事件处理的例子,并增加了右键菜单

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#!/usr/bin/env python
#*-* coding=utf-8 *-*

import sys
from PyQt4 import QtGui, QtCore

class MyWindow(QtGui.QMainWindow):

    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.setWindowTitle("Lpb-i")
        self.resize(300,400)

        self.label = QtGui.QLabel('Menu Action')    # 创建标签
        self.label.setAlignment(QtCore.Qt.AlignCenter)  # 设置标签对齐样式
        self.setCentralWidget(self.label)     # 添加标签

        menubar = self.menuBar()   # 获得窗口的菜单条
        self.file = menubar.addMenu('&File') # 添加file菜单
        open = self.file.addAction('Open') # 添加Open命令
        self.connect(open, QtCore.SIGNAL('triggered()'), self.OnOpen) # 菜单信号
        save = self.file.addAction('Save') # 添加save命令
        self.connect(save, QtCore.SIGNAL('triggered()'), self.OnSave) # save命令信号
        self.file.addSeparator()    # 添加分隔符
        close = self.file.addAction("Close") # 添加close命令
        self.connect(close, QtCore.SIGNAL('triggered()'), self.OnClose)

    def OnOpen(self):     # open的信号槽函数       
        self.label.setText("Menu Action: Open")

    def OnSave(self):
         self.label.setText("Menu Actio: Save")

    def OnClose(self):
        self.close()

    def contextMenuEvent(self, event):             # 重载弹出式菜单事件
        self.file.exec_(event.globalPos())

app = QtGui.QApplication(sys.argv)
win =MyWindow()
win.show()
app.exec_()

by 李鹏