本系列代码来自编成吧的小杨老师
1.活动块测试、按键触发和按下鼠标键关闭界面
1.1 滑动块测试
#-*- coding=utf-8 -*-
import sys
from PyQt4 import QtGui,QtCore
class SigSlot(QtGui.QWidget):
def __init__(self,parent=None):
QtGui.QWidget.__init__(self)
self.setWindowTitle(u"ider test")
lcd = QtGui.QLCDNumber(self)
slider = QtGui.QSlider(QtCore.Qt.Horizontal,self)
vbox = QtGui.QVBoxLayout()
vbox.addWidget(lcd)
vbox.addWidget(slider)
self.setLayout(vbox)
self.connect(slider,QtCore.SIGNAL("valueChanged(int)"),lcd,QtCore.SLOT("display(int)"))
self.resize(550,450)
app = QtGui.QApplication(sys.argv)
g = SigSlot()
g.show()
sys.exit(app.exec_())
lcd = QtGui.QLCDNumber(self)
创建一个lcd的部件
2.
slider = QtGui.QSlider(QtCore.Qt.Horizontal,self)
创建一个滑动块的部件
3.
vbox = QtGui.QVBoxLayout()
vbox.addWidget(lcd)
vbox.addWidget(slider)
self.setLayout(vbox)
将lcd和滑动块导入垂直布局,并加入到界面中
4.
self.connect(slider,QtCore.SIGNAL("valueChanged(int)"),lcd,QtCore.SLOT("display(int)"))
slider(滑动块滑动时)这个对象会发送信号:QtCore.SIGNAL(“valueChanged(int)”);
lcd这个对象会接收信号,并作出响应:QtCore.SLOT(“display(int)”)。
效果:
1.2 按下ESC后,关闭界面
#-*- coding=utf-8 -*-
import sys
from PyQt4 import QtGui,QtCore
class Esc(QtGui.QWidget):
def __init__(self,parent=None):
QtGui.QWidget.__init__(self)
self.setWindowTitle(u"press esc to make windows close")
self.resize(550,450)
self.connect(self,QtCore.SIGNAL("clodeEmitAPP()"),QtCore.SLOT("close()"))
def keyPressEvent(self, event):
if event.key() == QtCore.Qt.Key_Escape:
self.close()
app = QtGui.QApplication(sys.argv)
g = Esc()
g.show()
sys.exit(app.exec_())
self.connect(self,QtCore.SIGNAL("closeEmitAPP()"),QtCore.SLOT("close()"))
关闭程序(暂时未搞懂什么意思)
2.
def keyPressEvent(self, event):
if event.key() == QtCore.Qt.Key_Escape:
self.close()
KeyPressEvent是一个按键按下的事件处理函数,每当按下键盘,会检测按键,若是Esc,则会调用close(),直接关闭了界面。
1.3 按下鼠标任意键关闭界面
#-*- coding=utf-8 -*-
import sys
from PyQt4 import QtGui,QtCore
class Emit(QtGui.QWidget):
def __init__(self,parent=None):
QtGui.QWidget.__init__(self)
self.setWindowTitle(u"press mouse to make windows close")
self.resize(550,450)
self.connect(self,QtCore.SIGNAL("closeEmitAPP()"),QtCore.SLOT("close()"))
def mousePressEvent(self, event):
self.emit(QtCore.SIGNAL("closeEmitAPP()"))
app = QtGui.QApplication(sys.argv)
g = Emit()
g.show()
sys.exit(app.exec_())
def mousePressEvent(self, event):
self.emit(QtCore.SIGNAL("closeEmitAPP()"))
每当按下鼠标时候(任意键)都会触发的事件
emit与connect是相互配合的,相当于发出一个信号。而connect的第二个参数即为发出一个信号,然后第三个参数就对应地有动作。
这里发出一个QtCore.SIGNAL(“closeEmitAPP()”)的信号。
2.
self.connect(self,QtCore.SIGNAL("closeEmitAPP()"),QtCore.SLOT("close()"))
如果发射者与接收者属于同一个对象的话,那么在 connect 调用中接收者参数可以省略。
发出QtCore.SIGNAL(“closeEmitAPP()”)信号后,执行QtCore.SLOT(“close()”),关闭了界面。
2.对话框、打开文件
2.1 弹出对话框,输入并返回
#-*- coding=utf-8 -*-
import sys
from PyQt4 import QtGui,QtCore
class InputDialog(QtGui.QWidget):
def __init__(self,parent=None):
QtGui.QWidget.__init__(self)
self.setGeometry(300,300,350,80)
self.setWindowTitle(u"input talk windows")
self.button = QtGui.QPushButton(u"talk",self)
self.button.setFocusPolicy(QtCore.Qt.NoFocus)
self.button.move(20,20)
self.connect(self.button,QtCore.SIGNAL("clicked()"),self.showDialog)
self.setFocus()
self.label = QtGui.QLineEdit(self)
self.label.move(130,20)
def showDialog(self):
text,ok = QtGui.QInputDialog.getText(self,u"input talk windows",u"input name:")
if ok:
self.label.setText(unicode(text))
app = QtGui.QApplication(sys.argv)
g = InputDialog()
g.show()
sys.exit(app.exec_())
self.button = QtGui.QPushButton(u"talk",self)
self.button.setFocusPolicy(QtCore.Qt.NoFocus)
在应用程序中,都会有一个当前窗口,即当前获得焦点事件的窗口,这个窗口可以接受键盘的输入。该焦点事件即setFocusPolicy。
QtCore.Qt.NoFocus。焦点策略为没有焦点
参考:https://blog.csdn.net/jays_/article/details/83783871
添加一个带对话的按钮。
2.
self.connect(self.button,QtCore.SIGNAL("clicked()"),self.showDialog)
当产生信号:QtCore.SIGNAL(“clicked()”)时,调用showDialog
3.
text,ok = QtGui.QInputDialog.getText(self,u"input talk windows",u"input name:")
QtGui.QInputDialog.getText:跳出一个对话框,让输入内容。1:对话框的框名,2:输入的内容。
test:对话框返回的内容
ok:确认是否按了确定键
4.
self.label.setText(unicode(text))
将text内容导入至label
5.
self.setFocus()
设置焦点,会产生表示输入文本的"|"标志。
参考:https://zhuanlan.zhihu.com/p/37098565
6.
self.label = QtGui.QLineEdit(self)
定义了一行内容,用于接收 self.label.setText(unicode(text))中的内容。
效果:
2.2 打开文件,显示文本以及复选框
#coding=utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf8')
from PyQt4 import QtGui,QtCore
class OpenFile(QtGui.QMainWindow):
def __init__(self,parent=None):
QtGui.QWidget.__init__(self,parent)
self.setGeometry(300,300,350,300)
self.setWindowTitle(u'打开文件')
self.textEdit = QtGui.QTextEdit()
self.setCentralWidget(self.textEdit)
self.statusBar()
self.setFocus()
exit = QtGui.QAction(QtGui.QIcon('open.ico'),u'打开',self)
exit.setShortcut('Ctrl+Q')
exit.setStatusTip(u'打开新文件')
self.connect(exit,QtCore.SIGNAL('triggered()'),self.showDialog)
menubar = self.menuBar()
file = menubar.addMenu('&File')
file.addAction(exit)
def showDialog(self):
filename = QtGui.QFileDialog.getOpenFileName(self,u'打开文件','./')
file = open(filename)
data = file.read()
self.textEdit.setText(data)
app = QtGui.QApplication(sys.argv)
cd = OpenFile()
cd.show()
sys.exit(app.exec_())
self.textEdit = QtGui.QTextEdit()
创建文本信息,以便文本框加载。
2.
self.statusBar()
创建一个状态栏
3.
self.connect(exit,QtCore.SIGNAL('triggered()'),self.showDialog)
产生信号后,调用showDialog
4.
menubar = self.menuBar()
file = menubar.addMenu('&File')
创建菜单栏,并加入一个菜单
5.
def showDialog(self):
filename = QtGui.QFileDialog.getOpenFileName(self,u'打开文件','./')
file = open(filename)
data = file.read()
self.textEdit.setText(data)
getOpenFileName(self,u’打开文件’,‘./’) 从目录"./"打开文件
首先,创建一个对象(类型:QtGui.QFileDialog.getOpenFileName)
再,读取文件里的内容
最后文件内容导入至self.textEdit
6.
self.setCentralWidget(self.textEdit)
在继承了QtGui.QMainWindow这个父类后,其中有个方法,将这个部件放置在中间而不再需要布局。
效果:
2.3 设置复选框
#-*- coding=utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf8')
import sys
from PyQt4 import QtGui, QtCore
class CheckBox(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle(u'单选框')
self.cb = QtGui.QCheckBox(u'美女,选我啊', self)
self.cb.setFocusPolicy(QtCore.Qt.NoFocus)
self.cb.move(10, 10)
self.connect(self.cb, QtCore.SIGNAL('stateChanged(int)'), self.changeTitle)
def changeTitle(self, value):
if self.cb.isChecked():
self.setWindowTitle(u'单选框')
else:
self.setWindowTitle(u'没有选中')
app = QtGui.QApplication(sys.argv)
w = CheckBox()
w.show()
sys.exit(app.exec_())
self.cb = QtGui.QCheckBox(u'美女,选我啊', self)
添加一个候选框
2.
self.cb.setFocusPolicy(QtCore.Qt.NoFocus)
不添加焦点
3.
def changeTitle(self, value):
if self.cb.isChecked():
self.setWindowTitle(u'单选框')
else:
self.setWindowTitle(u'没有选中')
检测候选框是否被选中,给出两种情况。
效果: