QLineEdit.selectAll()
QLineEdit.setFocus()
QLineEdit.text()
QLineEdit.clear()
self.text = QLineEdit('在这里输入数字', self)
self.text.selectAll()
self.text.setFocus()
self.text.setGeometry(80, 50, 150 ,30)
QMessageBox.about
QMessageBox.critical
QMessageBox.information
QMessageBox.warning
QMessageBox.question(self, '确认', '确认退出吗', QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
critical = information = warning = question
QMessageBox.about(self, '看结果','猜小了!')
事件:
点击关闭按钮会触发closeEvent事件。
可以重写该事件来达到相应的目的。
def closeEvent(self, event):
reply = QMessageBox.question(self, '确认', '确认退出吗', QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
if reply == QMessageBox.Yes:
event.accept()
else:
event.ignore()
键盘触发事件
def keyPressEvent(self, e):
if e.key() == Qt.Key_Up:
self.lab.setText('↑')
elif e.key() == Qt.Key_Down:
self.lab.setText('↓')
elif e.key() == Qt.Key_Left:
self.lab.setText('←')
else:
self.lab.setText('→')
绘画事件
def paintEvent(self, event):
if self.pos:
q = QPainter(self)
q.drawLine(0, 0, self.pos.x(), self.pos.y())
鼠标移动事件
def mouseMoveEvent(self, event):
distance_from_center = round(((event.y() - 250)**2 + (event.x() - 500)**2)**0.5)
self.label.setText('坐标: ( x: %d ,y: %d )' % (event.x(), event.y()) + " 离中心点距离: " + str(distance_from_center))
self.pos = event.pos()
self.update()
self.setMouseTracking(True) #开启鼠标跟踪
有时,知道哪个窗口小部件是信号的发送者非常有用。 为此,PyQt5具有sender()方法。
import sys
from PyQt5.QtWidgets import (QApplication, QMessageBox, QWidget, QPushButton)
from random import randint
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(200, 200, 300, 300)
self.setWindowTitle('学点编程吧')
bt1 = QPushButton('剪刀',self)
bt1.setGeometry(30,180,50,50)
bt2 = QPushButton('石头',self)
bt2.setGeometry(100,180,50,50)
bt3 = QPushButton('布',self)
bt3.setGeometry(170,180,50,50)
bt1.clicked.connect(self.buttonclicked)
bt2.clicked.connect(self.buttonclicked)
bt3.clicked.connect(self.buttonclicked)
self.show()
def buttonclicked(self):
computer = randint(1,3)
player = 0
sender = self.sender()
if sender.text() == '剪刀':
player = 1
elif sender.text() == '石头':
player = 2
else:
player = 3
if player == computer:
QMessageBox.about(self, '结果', '平手')
elif player == 1 and computer == 2:
QMessageBox.about(self, '结果', '电脑:石头,电脑赢了!')
elif player == 2 and computer == 3:
QMessageBox.about(self, '结果', '电脑:布,电脑赢了!')
elif player == 3 and computer == 1:
QMessageBox.about(self,'结果','电脑:剪刀,电脑赢了!')
elif computer == 1 and player == 2:
QMessageBox.about(self,'结果','电脑:剪刀,玩家赢了!')
elif computer == 2 and player == 3:
QMessageBox.about(self,'结果','电脑:石头,玩家赢了!')
elif computer == 3 and player == 1:
QMessageBox.about(self,'结果','电脑:布,玩家赢了!')
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
信号
发出自定义信号
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QMessageBox)
from PyQt5.QtCore import (pyqtSignal, QObject)
class Signal(QObject):
showmouse = pyqtSignal()
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(200, 200, 300, 300)
self.setWindowTitle('学点编程吧')
self.s = Signal()
self.s.showmouse.connect(self.about)
self.show()
def about(self):
QMessageBox.about(self,'鼠标','你点鼠标了吧!')
def mousePressEvent(self, e):
self.s.showmouse.emit()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
布局
QHBoxLayout:水平方向布局管理器
QVBoxLayout:垂直方向布局管理器
QGridLayout:网格布局管理器
bt1 = QPushButton('剪刀', self)
bt2 = QPushButton('石头', self)
bt3 = QPushButton('布', self)
hbox = QHBoxLayout()
hbox.addStretch(1) #增加伸缩量
hbox.addWidget(bt1)
hbox.addStretch(1)#增加伸缩量
hbox.addWidget(bt2)
hbox.addStretch(1)#增加伸缩量
hbox.addWidget(bt3)
hbox.addStretch(6)#增加伸缩量
self.setLayout(hbox)
或者也可以直接
hbox = QHBoxLayout(self);这样就不需要self.setLayout(hbox)了。
其中四个addStretch()函数用于在button按钮间增加伸缩量,伸缩量的比例为1:1:1:6,意思就是将button以外的空白地方按设定的比例等分为9份并按照设定的顺序放入布局器中。