PyQt4的学习历程(3)

本系列代码来自编成吧的小杨老师

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'没有选中')

检测候选框是否被选中,给出两种情况。
效果:
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值