大家好,今天来介绍pyqt5教程菜鸟教程(如何安装python环境)的问题,以下是渲大师小编对此问题的归纳和整理,感兴趣的来一起看看吧!
python通过PyQt5实现登录界面
本例,展示了通过登录界面打开主界面的实现方式。
在开始实现登录界念雀面前,先给大家普及一下PyQt5的安装以知高弯及使用
pip install PyQt5
pip3.5 install pyqt5-tools
1.在win+R中输入designer并敲回车,即可启动Designer。一般选择“Main Window”点击“Create”即可创建。
若在win+R中输入designer并敲回车后无反应,可以直接搜designer.exe直接启动
2.创建后,可以方便快捷的用Qt Designer画出对应框体,如通过Combo Box添加下拉选择的控件;通过Push Button添加按钮;通过List Widget添加列表框;通过Table Widget添加数据表格框,table中设置列数(右键-Edit Items-Colums),调整框体位置和文字大小,背景颜色以及windowTitle来优化界面显示,使用快捷键Ctrl+R预览当前编写的GUI显示如下:
3.点击搭闷保存,生成*.ui的文件,本例中为test.ui,保存在D:\py\deploy文件夹下
如何安装python3pyqt5
Python3.5.3以上版本PyQt5的安装:
1、如果陵穗含你的系统有Python2版本,请使用pip3命令安装,如果只有Python3版本,使用pip命令。
2、更新pip版本库(如果低版本的Python3,请先安装pip):
3、安装PyQt5
4、说明:如果安装失败族尺,检查Python3的尺笑版本,Python3的低版本安装pyqt5之前可能会需要先安装sip。或者是因为你的Python3是64位的,手动安装的pyqt5是32位的。建议尽量使用pip安装。
python3使用pyqt5如何制作简单的浏览器的方法介绍
下面小编就为大家带来一篇python3使用pyqt5制作一个超简单浏览器的实例迹源。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小姿竖态编过来看看吧
我们使用的是QWebview模块,这里也主要是展示下QWebview的用法。
之前在网上找了半天的解析网页的内容,都不是很清楚。
这是核心代码纤睁:
webview = Qwebview()
webview.load(Qurl('http://www.cnblogs.com/Blaxon/'))
webview.show()完整代码(代码是拿的别的代码改得):
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtWebKitWidgets import *
class Form(QWidget):
def __init__(self, parent=None):
super(Form, self).__init__(parent)
tmp = QWebView()
buttonLayout1 = QVBoxLayout()
buttonLayout1.addWidget(tmp)
mainLayout = QGridLayout()
mainLayout.addLayout(buttonLayout1,)
self.setLayout(mainLayout)
self.setWindowTitle("Hello Qt")
tmp.load(QUrl('http://www.cnblogs.com/misoag/archive/2013/01/09/2853515.html'))
tmp.show()
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
screen = Form()
screen.show()
sys.exit(app.exec_())
pyqt5如何做正则表达式验证软件
首先,我照着前面提到的网页,大致画了个界面,包括三个 checkBox、两个 textEdit 和两个 label,分别放在三个 layout 里面大概就是下面这个界面:
保存后会得到一个扩展名为 .ui 的文件。比如我得到了一个 RegexTester.ui。
然后打开 cmd 命令行,切换到当前目录,输入以下命令: pyuic4 -o regexTesterUi.py RegexTester.ui,回车,就能根据画好的 ui 文件生成一个 py 文件。这时可以写一个测试脚本来运行一下这个界面。
1 from PyQt4.QtGui import * 2 from PyQt4.QtCore import * 3 import sys 4 import regexTesterUi 5 6 class TestDialog(QDialog,regexTesterUi.Ui_Dialog): 7 def __init__(self,parent=None): 8 super(TestDialog,self).__init__(parent) 9 self.setupUi(self)10 11 if __name__ == '__main__':12 app=QApplication(sys.argv)13 dialog=TestDialog()14 dialog.show()15 app.exec_()
运行这个脚本,我们就可以得到刚才画的那个 GUI 界面,并且可以选中三个 checkBox ,在两个 textEdit 里面春困输入文本。只是除此之外没有任何功能。现在界面已经做好,我们需要做的就是实现高亮匹配数据的功能。
首先我们来完善一下这个类,我们需要的变量为输入的正则表达式、输入的测试数据、三个匹配模式(大小写敏感、多行匹配、点匹配所有)。吵早
1 class RegexTesterDialog(QtGui.QDialog, regexTesterUi.Ui_Dialog): 2 3 def __init__(self, parent = None): 4 super(RegexTesterDialog, self).__init__(parent) 5 6 self.CI = False # case insensitive (i) 7 self.MB = False # ^$ match at line breaks (m) 8 self.DM = False # dot matched all (s) 9 升森雀 self.regex = ''10 self.data = ''11 12 self.ui = regexTesterUi.Ui_Dialog()13 self.ui.setupUi(self)
响应功能:
由于这个界面并没有按钮,我需要程序检测到任何一点变动就改变高亮的部分。这里就涉及到 Qt 的信号和槽机制。本文就不复述这些知识,具体可以参考QT的信号与槽机制介绍。这里我们就要用到 QTextEdit 控件的 textChanged() 信号函数。具体的介绍可以查看 Qt在线文档。这个信号函数在检测到 QTextEdit 控件中的文本发生了变化的时候会发射一个信号,与其关联的槽函数就会立即执行。而把这个信号函数和槽函数关联起来的方法就是 connect() 方法。这个网上也有很多介绍,这里我来介绍一个更 pythonic 的方法,使用 Python 的装饰器。PyQt中支持同名传递信号,就是说根据控件的名字来自动选择哪个槽。比如这里提到的 textChanged() 信号函数,如果要响应这个文本变化信号,可以这么做:
@QtCore.pyqtSlot() # 该装饰器标志此函数为接收信号的槽函数def on_textEdit_Regex_textChanged(self): # 槽函数名标准格式 【on_控件名字_信号函数名字】
self.regex = self.ui.textEdit_Regex.toPlainText()
self.ui.textEdit_Data.setText(self.regex)
这里在槽函数上面加一个装饰器表示这个函数为接收信号的槽函数,然后根据控件名和信号函数名命名一个槽函数,这里我的接收正则表达式输入的 QTextEdit 控件名为 textEdit_Regex,因此这个槽函数名为 on_textEdit_Regex_textChanged。在这个槽函数里,我们通过 toPlainText() 方法得到文本框中的文本数据,然后将 textEdit_Data 中的数据设置为我们输入的值,这样就可以测试这个槽函数运行是否正确。当测试 textEdit_Data 控件的信号和槽函数时,也可以利用 textEdit_Regex 来输出结果。
除了 QTextEdit 控件,我们的界面还有 QCheckBox 控件。去查一下文档,可以找到这个控件的信号函数为 stateChanged(int)。我们发现这个函数带有一个参数,使用之前的方法会发现无法发射信号,这里我们需要在装饰器和槽函数中加入这个参数:
@QtCore.pyqtSlot(int)def on_checkBox_CI_stateChanged(self, value): if self.ui.checkBox_CI.isChecked():
self.CI = True
self.ui.textEdit_Data.setText(‘True’) else:
self.CI = False
self.ui.textEdit_Data.setText(‘False')
虽然我们不知道这个参数是什么,但只要加进来,就可以正常使用。同理,碰到需要两个参数的信号函数时,只要再加一个参数就行。这里,当接收到 stateChanged(int) 信号时,我们使用 isChecked() 方法来检查控件是否被选中。如果选中了,则返回真,否则返回假。这里我们同样用到了 QTextEdit 控件来输出结果测试信号是否正确。其他两个 QCheckBox 控件同样设置。
匹配功能:
完成基本的响应函数之后,就要开始实现匹配功能。这里很简单,直接调用 re 模块,使用 findall() 方法。由于有三个 checkBox 提供三种匹配模式:
-
re.I (全拼:IGNORECASE): 忽略大小写(括号内是完整写法,下同)
-
re.M (全拼:MULTILINE): 多行模式,改变'^'和'$'的行为
-
re.S (全拼:DOTALL): 点任意匹配模式,改变'.'的行为
- 1 def matchData(self): 2 if (not self.CI) and (not self.MB) and (not self.DM): 3 pattern = re.compile(self.regex) 4 elif (not self.CI) and (not self.MB) and (self.DM): 5 pattern = re.compile(self.regex, re.S) 6 elif (not self.CI) and (self.MB) and (not self.DM): 7 pattern = re.compile(self.regex, re.M) 8 elif (not self.CI) and (self.MB) and (self.DM): 9 pattern = re.compile(self.regex, re.Mre.S)10 elif (self.CI) and (not self.MB) and (not self.DM):11 pattern = re.compile(self.regex, re.I)12 elif (self.CI) and (not self.MB) and (self.DM):13 pattern = re.compile(self.regex, re.Ire.S)14 elif (self.CI) and (self.MB) and (not self.DM):15 pattern = re.compile(self.regex, re.Ire.M)16 elif (self.CI) and (self.MB) and (self.DM):17 pattern = re.compile(self.regex, re.Ire.Mre.S)18 19 dataMatched = re.findall(pattern, self.data)
- @QtCore.pyqtSlot()
- def on_textEdit_Regex_textChanged(self):
- self.regex = unicode(self.ui.textEdit_Regex.toPlainText())
- self.matchData()
因此总共有 23=8 种匹配模式:
这里我们就可以得到匹配好的一个列表。刚开始实现这部分的时候,由于 Python 的 re 模块接收的参数类型是 Python string,而 PyQt 中控件得到的数据是 QString,一直报错,我一度准备使用 Qt 的 QRegExp 类来进行正则表达式匹配。但是查找文档查了好久,只找到一个改变大小写敏感的函数,找不到设置多行匹配和点匹配所有的方法,于是我去 stackoverflow 上问了个问题:Can QRegExp do MULTILINE and DOTALL match?得到了一个详细的答案,一个解决问题的简单方法就是使用 unicode() 方法将 QString 转换成 python string,而一般不用将 python string 转换成 QString,因为接收 QString 类型参数的函数会自动将python string 转换成 QString。这样,我们直接在两个 QTextEdit 控件的槽函数中将得到的文本数据转换成 python string,就可以交给 re 模块处理了。
通过单步调试,我们可以测试上述 dataMatched 列表中的数据是否正确,如果正确,我们就可以继续进行下一步,实现高亮功能。
PyQt5编程(17):窗口事件
1.改变窗口状态
下列的方法可用来改变或判断窗口的状态(最小化、最大化、隐藏和显示):
from PyQt5 import QtCore, QtWidgets
class MyWindow(QtWidgets.QWidget):
def init (self, parent=None):
QtWidgets.QWidget. init (self, parent)
self.resize(300, 100)
def changeEvent(self, e):
if e.type() == QtCore.QEvent.WindowStateChange:
if self.isMinimized():
print("窗口最小化")
elif self.isMaximized():
print("窗口扮芹最大化")
elif self.isFullScreen():
print("全屏显示")
elif self.isActiveWindow():
print("活动窗口")
QtWidgets.QWidget.changeEvent(self, e)
def showEvent(self, e):
print("窗口显示")
QtWidgets.QWidget.showEvent(self, e)
def hideEvent(self, e):
print("窗口隐藏")
QtWidgets.QWidget.hideEvent(self, e)
if name == " main ":
import sys
app = QtWidgets.QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec_())
2.改变窗谈世口的位置和尺寸
移动窗口、调整窗口尺寸时,下列方法将被调用:
from PyQt5 import QtWidgets
class MyWindow(QtWidgets.QWidget):
def init (self, parent=None):
QtWidgets.QWidget. init (self, parent)
self.resize(300, 100)
def moveEvent(self, e):
print("x = {0}; y = {1}".format(e.pos().x(), e.pos().y()))
QtWidgets.QWidget.moveEvent(self, e)
def resizeEvent(self, e):
print("w = {0}; h = {1}".format(e.size().width(),e.size().height()))
QtWidgets.QWidget.resizeEvent(self, e)
if name == " main ":
import sys
app = QtWidgets.QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec_())
3.重绘窗口
当控件或控件的部分变为可见时,控件需要重绘。此时,paintEvent(self,event)被调用。event参数包含QPaintEvent类的实例,通过该类有以下方法:
4.阻止窗口关闭
通过单击窗口标题栏中的关闭按钮或调用close()方法来关闭窗口时,closeEvent(self,event)方法被调用。 通过event参数可获得QCloseEvent类的一个对象。 为了防止窗口关闭,必须通过该对象调用ignore()方法,否则调用accept()方法。
下面的例子为:单击关闭按钮将显示一个标准对话框,要求确认是否关闭该窗口。 如果用户单击“是”按钮,则关闭窗口;如果用户单击厅侍毕“否”按钮,则仅关闭对话框,窗口不会被关闭。
from PyQt5 import QtWidgets
class MyWindow(QtWidgets.QWidget):
def init (self, parent=None):
QtWidgets.QWidget. init (self, parent)
self.resize(300, 100)
def closeEvent(self, e):
result = QtWidgets.QMessageBox.question(self,
"关闭窗口确认",
"真的要关闭窗口?",
QtWidgets.QMessageBox.Yes QtWidgets.QMessageBox.No,
QtWidgets.QMessageBox.No)
if result == QtWidgets.QMessageBox.Yes:
e.accept()
QtWidgets.QWidget.closeEvent(self, e)
else:
e.ignore()
if name == " main ":
import sys
app = QtWidgets.QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec_())
本文地址:https://gpu.xuandashi.com/80608.html,转载请说明来源于:渲大师
声明:本站部分内容来自网络,如无特殊说明或标注,均为本站原创发布。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。分享目的仅供大家学习与参考,不代表本站立场!