转载 selenium_对浏览器操作、鼠标操作等总结
https://www.jianshu.com/p/7a4414082ce2
https://wikidocs.net/21937
https://www.cnblogs.com/linyfeng/p/11392221.html
https://blog.csdn.net/jia666666/category_9278208.html
生成EXE文件
pyinstaller -w -F qtextbrowser_advanced.py
set CONDA_FORCE_32BIT=1 //切换到32位
set CONDA_FORCE_32BIT= // 切换到64位
conda create -n py32-37 python=3.7 //创建python3.7 环境
activate py27 //激活环境
deactivate py27 //退出环境
查看环境
conda info --env
激活环境
conda activate machine
路径改成
H:
cd H:\python
启动jupyter notebook
jupyter notebook
pip install pyqt5
pip install pyqt5-tools
pip install opencv-python
pip install Ta-Lib
conda install pandas
1.vs2017中 菜单栏 --> 工具 --> 外部工具 --> 添加
标题:QtDesigner
命令:C:\ProgramData\Anaconda3\envs\py3-32\Scripts\pyqt5designer.exe(虚拟环境目录)
参数:$(ItemFileName)Form.ui
初始目录:$(ItemDir)
使用输出窗口:选择
2.再次添加
标题:PyUIC5
命令:C:\ProgramData\Anaconda3\envs\py3-32\Scripts\pyuic5.exe (虚拟环境目录)
参数:$(ItemFileName).ui -o $(ItemFileName).py
初始目录:$(ItemDir)
使用输出窗口:选择
提示输入参数:选择
3.再次添加
标题:PyRCC5 (设计有资源文件时转xxx.py文件)
命令:C:\ProgramData\Anaconda3\envs\py3-32\Scripts\pyrcc5.exe (虚拟环境目录)
参数:$(ItemFileName).ui -o $(ItemFileName).py
初始目录:$(ItemDir)
使用输出窗口:选择
提示输入参数:选择
https://blog.csdn.net/weixin_41145119/article/details/88889509
先用 QtDesigner 设计并保存为UI
再用PyUIC5 吧.ui文件变成.py 文件
1 # -*- coding: utf-8 -*-
2
3 # Form implementation generated from reading ui file 'untitled.ui'
4 #
5 # Created by: PyQt5 UI code generator 5.13.0
6 #
7 # WARNING! All changes made in this file will be lost!
8
9
10 from PyQt5 import QtCore, QtGui, QtWidgets
11
12
13 class Ui_MainWindow(object):
14 def setupUi(self, MainWindow):
15 MainWindow.setObjectName("MainWindow")
16 MainWindow.resize(800, 600)
17 self.centralwidget = QtWidgets.QWidget(MainWindow)
18 self.centralwidget.setObjectName("centralwidget")
19 self.pushButton = QtWidgets.QPushButton(self.centralwidget)
20 self.pushButton.setGeometry(QtCore.QRect(180, 330, 75, 23))
21 self.pushButton.setObjectName("pushButton")
22 self.textEdit = QtWidgets.QTextEdit(self.centralwidget)
23 self.textEdit.setGeometry(QtCore.QRect(160, 130, 104, 71))
24 self.textEdit.setObjectName("textEdit")
25 MainWindow.setCentralWidget(self.centralwidget)
26 self.menubar = QtWidgets.QMenuBar(MainWindow)
27 self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23))
28 self.menubar.setObjectName("menubar")
29 MainWindow.setMenuBar(self.menubar)
30 self.statusbar = QtWidgets.QStatusBar(MainWindow)
31 self.statusbar.setObjectName("statusbar")
32 MainWindow.setStatusBar(self.statusbar)
33
34 self.retranslateUi(MainWindow)
35 QtCore.QMetaObject.connectSlotsByName(MainWindow)
36
37 def retranslateUi(self, MainWindow):
38 _translate = QtCore.QCoreApplication.translate
39 MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
40 self.pushButton.setText(_translate("MainWindow", "PushButton"))
1 # -*- coding: utf-8 -*-
2
3 from untitled import Ui_MainWindow #根据实际生成的UI的类名
4 # import PyQt5
5
6 import sys
7 import cv2
8 from PyQt5.QtWidgets import QApplication, QMainWindow
9 from PyQt5.QtGui import QImage, QPixmap
10
11 class MyWindow(QMainWindow, Ui_MainWindow): #生成UI的类
12 def __init__(self, *args, **kwargs):
13 super().__init__(*args, **kwargs)
14 self.setupUi(self)
15 self.pushButton.clicked.connect(self.OnPushButton1)
16
17 num = 0
18
19 def OnPushButton1(self):
20 self.textEdit.append("HellowPyQt5")
21 self.num += 1
22 self.setWindowTitle("pushbutton has been clicked {0} times".format(self.num))
23 return None
24
25 if __name__ == "__main__":
26 app = QApplication(sys.argv)
27 mainWindow = MyWindow()
28 mainWindow.show()
29 sys.exit(app.exec_())
1.QPushButton
메서드 설명
setCheckable() True 설정 시, 누른 상태와 그렇지 않은 상태를 구분합니다.
toggle() 상태를 바꿉니다.
setIcon() 버튼의 아이콘을 설정합니다.
setEnabled() False 설정 시, 버튼을 사용할 수 없습니다.
isChecked() 버튼의 선택 여부를 반환합니다.
setText() 버튼에 표시될 텍스트를 설정합니다.
text() 버튼에 표시된 텍스트를 반환합니다.
시그널 설명
clicked() 버튼을 클릭할 때 발생합니다.
pressed() 버튼이 눌렸을 때 발생합니다.
released() 버튼을 눌렀다 뗄 때 발생합니다.
toggled() 버튼의 상태가 바뀔 때 발생합니다.
QCheckBox
可用Group Box
메서드 설명
text() 체크 박스의 라벨 텍스트를 반환합니다.
setText() 체크 박스의 라벨 텍스트를 설정합니다.
isChecked() 체크 박스의 상태를 반환합니다. (True/False)
checkState() 체크 박스의 상태를 반환합니다. (2/1/0)
toggle() 체크 박스의 상태를 변경합니다.
시그널 설명
pressed() 체크 박스를 누를 때 신호를 발생합니다.
released() 체크 박스에서 뗄 때 신호를 발생합니다.
clicked() 체크 박스를 클릭할 때 신호를 발생합니다.
stateChanged() 체크 박스의 상태가 바뀔 때 신호를 발생합니다.
self.cB1.clicked.connect(self.cb1_fun)
def cb1_fun(self):
if self.cB1.isChecked():
self.cB2.setText("checked")
else:
self.cB2.setText("unchecked")
QRadioBox
메서드 설명
text() 버튼의 텍스트를 반환합니다.
setText() 라벨에 들어갈 텍스트를 설정합니다.
setChecked() 버튼의 선택 여부를 설정합니다.
isChecked() 버튼의 선택 여부를 반환합니다.
toggle() 버튼의 상태를 변경합니다.
메서드 설명
pressed() 버튼을 누를 때 신호를 발생합니다.
released() 버튼에서 뗄 때 신호를 발생합니다.
clicked() 버튼을 클릭할 때 신호를 발생합니다.
toggled() 버튼의 상태가 바뀔 때 신호를 발생합니다.
QComboBox
self.comboBox1.addItem("选项1")#添加选项1
self.comboBox1.addItem("选项2")
self.comboBox1.addItem("选项3")
self.comboBox1.activated[str].connect(self.onActivate)
def onActivate(self,text):
self.label.setText(text)# 直接显示选中的字内容
self.label.adjustSize()
QLineEdit
setEchoMode(0))
상수 값 설명
QLineEdit.Normal 0 입력된 문자를 표시합니다. (기본값)
QLineEdit.NoEcho 1 문자열을 표시하지 않습니다. 이 설정은 비밀번호의 글자수도 공개하지 않을 때 유용합니다.
QLineEdit.Password 2 입력된 문자 대신 비밀번호 가림용 문자를 표시합니다.
QLineEdit.PasswordEchoOnEdit 3 입력할 때만 문자를 표시하고, 수정 중에는 다른 문자를 표시합니다.
시그널 설명
cursorPositionChanged() 커서가 움직일 때 발생하는 신호를 발생합니다.
editingFinished() 편집이 끝났을 때 (Return/Enter 버튼이 눌릴 때) 신호를 발생합니다.
returnPressed() Return/Enter 버튼이 눌릴 때 신호를 발생합니다.
selectionChanged() 선택 영역이 바뀔 때 신호를 발생합니다.
textChanged() 텍스트가 변경될 때 신호를 발생합니다.
textEdited() 텍스트가 편집될 때 신호를 발생합니다.
self.lineEdit1.setEchoMode(QLineEdit.Normal)#正常
self.lineEdit2.setEchoMode(QLineEdit.NoEcho)#虽然输入了,显示没有输入
self.lineEdit3.setEchoMode(QLineEdit.Password)#密码
self.lineEdit4.setEchoMode(QLineEdit.PasswordEchoOnEdit)#输入完变成密码
self.lineEdit2.textChanged[str].connect(self.chan_func)
def chan_func(self,text):
self.label.setText(text)
self.label.adjustSize()
QProgressBar
setMinimum()
setMaximum()
setRange()
setValue()
reset()
QSlider & QDial
setTickInterval() #틱간격을 조절
setTickPosition() #틱위치를 조절
상수 값 설명
QSlider.NoTicks 0 틱을 표시하지 않습니다.
QSlider.TicksAbove 1 틱을 (수평) 슬라이더 위쪽에 표시합니다.
QSlider.TicksBelow 2 틱을 (수평) 슬라이더 아래쪽에 표시합니다.
QSlider.TicksBothSides 3 틱을 (수평) 슬라이더 양쪽에 표시합니다.
QSlider.TicksLeft TicksAbove 틱을 (수직) 슬라이더 왼쪽에 표시합니다.
QSlider.TicksRight TicksBelow 틱을 (수직) 슬라이더 오른쪽에 표시합니다.
self.progressBar.setMinimum(0)
self.progressBar.setMaximum(100)
self.progressBar.setValue(60)
self.horizontalSlider.setMinimum(0)
self.horizontalSlider.setMaximum(100)
self.horizontalSlider.valueChanged.connect(self.slider_fun)
def slider_fun(self,val):
self.progressBar.setValue(val)
시그널 설명
valueChanged() 슬라이더의 값이 변할 때 발생합니다.
sliderPressed() 사용자가 슬라이더를 움직이기 시작할 때 발생합니다.
sliderMoved() 사용자가 슬라이더를 움직이면 발생합니다.
sliderReleased() 사용자가 슬라이더를 놓을 때 발생합니다.
QPixmap
pixmap = QPixmap('landscape.jpg')
lbl_img = QLabel()
lbl_img.setPixmap(pixmap)
弹出单条输入对话框
def btn_fun(self):
"""
返回值类型:因为只能输入一条
getText()
getMultiLineText()
getInt()
getDouble()
getItem()
"""
text,ok=QInputDialog.getText(self,'标题',"输入名字:")
if ok:
self.label.setText(text)
颜色对话框:
col = QColorDialog.getColor()
if col.isValid():
self.frm.setStyleSheet('QWidget { background-color: %s }' % col.name())
字体对话框:
font, ok = QFontDialog.getFont()
if ok:
self.lbl.setFont(font)
文件选择对话框:
def btn1_fun(self):
fname=QFileDialog.getOpenFileName(self,'标题','./')
if fname[0]:
f_hand=open(fname[0],'r')
with f_hand:
fdata=f_hand.read()
self.textEdit.setText(fdata)
消息对话框 有YES No两个按钮
def btn2_fun(self):
my_select=QMessageBox.question(self,'标题',"准备好了吗?",QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
if my_select == QMessageBox.Yes:
print("选择了Yes")
else:
print("选择了No")
定时器
timer = QTimer(self)
timer.setSingleShot(true);//计时器循环此时true只循环一次,false无限循环
timer.start(5000)//定时5秒
timer.timeout.connect(self.timeout)
timer.stop()//停止
def timeout(self):
print("5秒")
事件
이벤트 핸들러 설명
keyPressEvent 키보드를 눌렀을 때 동작합니다.
keyReleaseEvent 키보드를 눌렀다가 뗄 때 동작합니다.
mouseDoubleClickEvent 마우스를 더블클릭할 때 동작합니다.
mouseMoveEvent 마우스를 움직일 때 동작합니다.
mousePressEvent 마우스를 누를 때 동작합니다.
mouseReleaseEvent 마우스를 눌렀다가 뗄 때 동작합니다.
moveEvent 위젯이 이동할 때 동작합니다.
resizeEvent 위젯의 크기를 변경할 때 동작합니다.
1 from PyQt5.QtCore import *
2
3 def keyPressEvent(self,e):
4 if e.key() == Qt.Key_Escape:
5 print("Escape")
6 elif e.key() == Qt.Key_A: #按下键盘A
7 print("A")
8 elif e.key() == Qt.Key_B: #按下键盘B
9 print("B")
10 def mouseMoveEvent(self,e): #按下并拖动
11 x=e.x()
12 y=e.y()
13 print("x={0},y={1}".format(x,y))
用户信号
1 import sys
2 from PyQt5.QtCore import *
3 from PyQt5.QtWidgets import *
4 from L705_UserSignal_ui import Ui_MainWindow
5
6 class SigClass(QObject):
7 # 定义了一个“def_sig1”信号,该信号没有参数据
8 def_sig1=pyqtSignal()
9 # 定义了一个"def_sig2"信号,该信号有两个参数
10 def_sig2=pyqtSignal(int,str)
11
12 class MainWinClass(QMainWindow,Ui_MainWindow):
13 def __init__(self):
14 super().__init__()
15 self.setupUi(self)
16
17 self.sigc=SigClass() #类
18 self.sigc.def_sig1.connect(self.sig1_fun) # 绑定信号1和槽函数1
19 self.sigc.def_sig2.connect(self.sig2_fun) # 绑定信号2和槽函数2
20
21 self.pushButton1.clicked.connect(self.btn1_fun)
22 self.pushButton2.clicked.connect(self.btn2_fun)
23 def btn1_fun(self):
24 self.sigc.def_sig1.emit();#提交
25
26 def btn2_fun(self):
27 self.sigc.def_sig2.emit(10,'boy');#提交
28
29 def sig1_fun(self):
30 print("sig1_fun")
31
32 def sig2_fun(self,age,name):
33 print("sig2_fun%d,%s",(age,name))
34
35 if __name__ == "__main__":
36 app=QApplication(sys.argv)
37 myWin=MainWinClass()
38 myWin.show()
39 sys.exit(app.exec_())
40
1 import sys
2 from PyQt5.QtWidgets import *
3 from PyQt5.QtCore import *
4
5
6 class MySignal(QObject):
7 signal1 = pyqtSignal()
8
9 def run(self):
10 self.signal1.emit()
11
12 class MyWindow(QMainWindow):
13 def __init__(self):
14 super().__init__()
15
16 mysignal = MySignal()
17 mysignal.signal1.connect(self.signal1_emitted)
18 mysignal.run()
19
20 @pyqtSlot()
21 def signal1_emitted(self):
22 print("signal1 emitted")
23
24 app = QApplication(sys.argv)
25 window = MyWindow()
26 window.show()
27 app.exec_()
多个信号
1 import sys
2 from PyQt5.QtWidgets import *
3 from PyQt5.QtCore import *
4
5 class MySignal(QObject):
6 signal1 = pyqtSignal()
7 signal2 = pyqtSignal(int, int)
8
9 def run(self):
10 self.signal1.emit()
11 self.signal2.emit(1, 2)
12
13 class MyWindow(QMainWindow):
14 def __init__(self):
15 super().__init__()
16
17 mysignal = MySignal()
18 mysignal.signal1.connect(self.signal1_emitted)
19 mysignal.signal2.connect(self.signal2_emitted)
20 mysignal.run()
21
22 @pyqtSlot()
23 def signal1_emitted(self):
24 print("signal1 emitted")
25
26 @pyqtSlot(int, int)
27 def signal2_emitted(self, arg1, arg2):
28 print("signal2 emitted", arg1, arg2)
29
30
31 app = QApplication(sys.argv)
32 window = MyWindow()
33 window.show()
34 app.exec_()
多线程1
1 import sys
2 from PyQt5.QtWidgets import *
3 from PyQt5.QtCore import *
4
5 class Worker(QThread):
6 def run(self):
7 while True:
8 print("hello")
9 self.sleep(1)
10
11 class MyWindow(QMainWindow):
12 def __init__(self):
13 super().__init__()
14
15 self.worker = Worker()
16 self.worker.start()
17
18 app = QApplication(sys.argv)
19 mywindow = MyWindow()
20 mywindow.show()
21 app.exec_()
传递参数
1 # -*- coding: utf-8 -*-
2
3 import sys
4 import time
5 from PyQt5.QtCore import QThread, pyqtSignal
6 from PyQt5.QtWidgets import QApplication, QMainWindow
7 from QThread_Example_UI import Ui_Form
8
9 class MyMainForm(QMainWindow, Ui_Form):
10 def __init__(self, parent=None):
11 super(MyMainForm, self).__init__(parent)
12 self.setupUi(self)
13 # 实例化线程对象
14 self.work = WorkThread()
15 self.runButton.clicked.connect(self.execute)
16
17 def execute(self):
18 # 启动线程
19 self.work.start()
20 # 线程自定义信号连接的槽函数
21 self.work.trigger.connect(self.display)
22
23 def display(self,str):
24 # 由于自定义信号时自动传递一个字符串参数,所以在这个槽函数中要接受一个参数
25 self.listWidget.addItem(str)
26
27 class WorkThread(QThread):
28 # 自定义信号对象。参数str就代表这个信号可以传一个字符串
29 trigger = pyqtSignal(str)
30
31 def __int__(self):
32 # 初始化函数
33 super(WorkThread, self).__init__()
34
35 def run(self):
36 #重写线程执行的run函数
37 #触发自定义信号
38 for i in range(20):
39 time.sleep(1)
40 # 通过自定义信号把待显示的字符串传递给槽函数
41 self.trigger.emit(str(i))
42
43 if __name__ == "__main__":
44 app = QApplication(sys.argv)
45 myWin = MyMainForm()
46 myWin.show()
47 sys.exit(app.exec_())
最基本
#导入程序运行必须模块
import sys
#PyQt5中使用的基本控件都在PyQt5.QtWidgets模块中
from PyQt5.QtWidgets import *
#导入designer工具生成的login模块
from login import Ui_Form class MyMainForm(QMainWindow, Ui_Form):
def __init__(self):
super().__init__()
self.setupUi(self)
#添加登录按钮信号和槽。注意display函数不加小括号()
self.login_Button.clicked.connect(self.display)
#添加退出按钮信号和槽。调用close函数
self.cancel_Button.clicked.connect(self.close)
def display(self):
#利用line Edit控件对象text()函数获取界面输入
username = self.user_lineEdit.text()
password = self.pwd_lineEdit.text()
#利用text Browser控件对象setText()函数设置界面显示
self.user_textBrowser.setText("登录成功!\n" + "用户名是: "+ username+ ",密码是: "+ password) if __name__ == "__main__":
#固定的,PyQt5程序都需要QApplication对象。sys.argv是命令行参数列表,确保程序可以双击运行
app = QApplication(sys.argv)
#初始化
myWin = MyMainForm()
#将窗口控件显示在屏幕上
myWin.show()
#程序运行,sys.exit方法确保程序完整退出。
sys.exit(app.exec_())
直接读取UI并显示
1 import sys
2 from PyQt5 import QtWidgets ,uic
3
4 class Form(QtWidgets.QDialog):
5 def __init__(self):
6 super().__init__()
7 self.ui = uic.loadUi("asd.ui") #ui 파일 불러오기
8 self.ui.show()
9
10 if __name__ == '__main__':
11 app = QtWidgets.QApplication(sys.argv)
12 w = Form()
13 sys.exit(app.exec())
启动多个UI
1 import sys
2 from PyQt5.QtWidgets import *
3
4 class MyWidget(QWidget):
5 def __init__(self):
6 super().__init__()
7 btn1 = QPushButton('1')
8 btn2 = QPushButton('2')
9
10 layout = QHBoxLayout()
11 layout.addWidget(btn1)
12 layout.addWidget(btn2)
13 self.setLayout(layout)
14
15 self.setGeometry(300, 100, 350, 150) # x, y, width, height
16 self.setWindowTitle("QWidget")
17 self.show()
18
19 class MyDialog(QDialog):
20 def __init__(self):
21 super().__init__()
22 btn1 = QPushButton('1')
23 btn2 = QPushButton('2')
24
25 layout = QHBoxLayout()
26 layout.addWidget(btn1)
27 layout.addWidget(btn2)
28 self.setLayout(layout)
29
30 self.setGeometry(300, 300, 350, 150)
31 self.setWindowTitle("QDialog")
32 self.show()
33
34 class MyMainWindow(QMainWindow):
35 """
36 틀린방법...
37
38 ** QWidget, QDialog 처럼 layout 사용 못함.
39 """
40 def __init__(self):
41 super().__init__()
42 btn1 = QPushButton('1')
43 btn2 = QPushButton('2')
44
45 layout = QHBoxLayout()
46 layout.addWidget(btn1)
47 layout.addWidget(btn2)
48 self.setLayout(layout)
49
50 self.setGeometry(300, 500, 350, 150)
51 self.setWindowTitle("QMainWindow 틀린 방법")
52 self.show()
53
54
55 class MyMainWindow2(QMainWindow):
56 """
57 옳은 방법...
58
59 QWidget, QDialog 와 달리 QMainWindow 는 자체적으로 layout 가지고 있다.
60 central widget 을 반드시 필요로함.
61 """
62 def __init__(self):
63 super().__init__()
64 wg = MyWidget()
65 # wg = MyWidget2() # placeholder -- QWidget 상속하여 만든것으로 추후 교체하면 됨.
66 self.setCentralWidget(wg) # 반드시 필요함.
67
68 self.setGeometry(300, 700, 350, 150)
69 self.show()
70
71
72 if __name__ == '__main__':
73 app = QApplication(sys.argv)
74 ex = MyWidget()
75 ex2 = MyMainWindow()
76 ex3 = MyDialog()
77 ex4 = MyMainWindow2()
78 sys.exit(app.exec_())
1 import sys
2 from PyQt5.QtWidgets import *
3 from pyqtgraph import PlotWidget, plot
4 from L0001_UserDialog_ui import Ui_MainWindow
5
6 class MainWindow(QMainWindow,Ui_MainWindow):
7
8 def __init__(self):
9 super().__init__()
10 self.setupUi(self)
11 self.pushButton.clicked.connect(self.btn_func)
12 def btn_func(self):
13 self.widget.plot([1,2,3,4,5,6,7,8,9,10], [30,32,34,32,33,31,29,32,35,45])
14 self.widget.plot.xlabel("hello")
15 self.widget.plot.show()
16
17 if __name__ == '__main__':
18 app = QApplication(sys.argv)
19 main = MainWindow()
20 main.show()
21 sys.exit(app.exec_())
比较完整的历程
1 #https://www.learnpyqt.com/courses/graphics-plotting/plotting-pyqtgraph/
2 #http://www.pyqtgraph.org/documentation/
3 import sys
4 from PyQt5.QtWidgets import *
5 from pyqtgraph import PlotWidget,plot
6 import pyqtgraph as pg
7 from L0001_UserDialog_ui import Ui_MainWindow
8 import matplotlib.pyplot as plt
9
10 class MainWindow(QMainWindow,Ui_MainWindow):
11
12 def __init__(self):
13 super().__init__()
14 self.setupUi(self)
15 #self.pushButton.clicked.connect(self.btn_func)
16 self.graphWidget = pg.PlotWidget()
17 self.setCentralWidget(self.graphWidget)
18
19 hour = [1,2,3,4,5,6,7,8,9,10]
20 temperature_1 = [30,32,34,32,33,31,29,32,35,45]
21 temperature_2 = [50,35,44,22,38,32,27,38,32,44]
22
23 #Add Background colour to white
24 self.graphWidget.setBackground('w') #
25 #Add Title
26 #self.graphWidget.setTitle("Your Title Here", color='blue', size=30)
27 #Add Axis Labels
28 self.graphWidget.setLabel('left', 'Temperature (°C)', color='red', size=30)
29 self.graphWidget.setLabel('bottom', 'Hour (H)', color='red', size=30)
30 #Add legend
31 self.graphWidget.addLegend()
32 #Add grid
33 self.graphWidget.showGrid(x=True, y=True)
34 #Set Range
35 self.graphWidget.setXRange(0, 10, padding=0)
36 self.graphWidget.setYRange(20, 55, padding=0)
37
38 self.plot(hour, temperature_1, "Sensor1", 'r')
39 self.plot(hour, temperature_2, "Sensor2", 'b')
40
41 def plot(self, x, y, plotname, color):
42 pen = pg.mkPen(color=color)
43 self.graphWidget.plot(x, y, name=plotname, pen=pen, symbol='+', symbolSize=30, symbolBrush=(color))
44
45
46 if __name__ == '__main__':
47 app = QApplication(sys.argv)
48 main = MainWindow()
49 main.show()
50 sys.exit(app.exec_())
import sys
import numpy as np
from PyQt5.QtWidgets import *
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas class MyWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI() self.setLayout(self.layout)
self.setGeometry(200, 200, 800, 600) def initUI(self):
self.fig = plt.Figure()
self.canvas = FigureCanvas(self.fig) layout = QVBoxLayout()
layout.addWidget(self.canvas) cb = QComboBox()
cb.addItem('Graph1')
cb.addItem('Graph2')
cb.activated[str].connect(self.onComboBoxChanged)
layout.addWidget(cb) self.layout = layout self.onComboBoxChanged(cb.currentText()) def onComboBoxChanged(self, text):
if text == 'Graph1':
self.doGraph1()
elif text == 'Graph2':
self.doGraph2() def doGraph1(self):
x = np.arange(0, 10, 0.5)
y1 = np.sin(x)
y2 = np.cos(x) self.fig.clear() ax = self.fig.add_subplot(111)
ax.plot(x, y1, label="sin(x)")
ax.plot(x, y2, label="cos(x)", linestyle="--") ax.set_xlabel("x")
ax.set_xlabel("y") ax.set_title("sin & cos")
ax.legend() self.canvas.draw() def doGraph2(self):
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
Z = X**2 + Y**2 self.fig.clear() ax = self.fig.gca(projection='3d')
ax.plot_wireframe(X, Y, Z, color='black') self.canvas.draw() if __name__ == "__main__":
app = QApplication(sys.argv)
window = MyWindow()
window.show()
app.exec_()
转载 selenium_对浏览器操作、鼠标操作等总结的更多相关文章
- Selenium_模拟键盘和鼠标操作(9)
模拟键盘键盘和鼠标操作主要使用到selenium的keys包,源码如下 class Keys(object): """ Set of special keys codes ...
- Selenium基础知识(二)鼠标操作
一.鼠标操作 这个需要使用webdriver下的ActionChains类,这个类是操作鼠标操作的: from selenium.webdriver import ActionChains 鼠标操作可 ...
- 【转载】WebDriver常用的鼠标/键盘操作
注:driver为一个WebDriver的实例,xpath为一个元素的xpath字符串,在本文中一律采用xpath的方式定位元素 1.鼠标右键点击操作:Actions action = new Act ...
- [转载]3.1 UiPath鼠标操作元素的介绍和使用
一.鼠标(mouse)操作的介绍 模拟用户使用鼠标操作的一种行为,例如单击,双击,悬浮.根据作用对象的不同我们可以分为对元素的操作.对文本的操作和对图像的操作 二.鼠标对元素的操作在UiPath中的使 ...
- [转载]3.2 UiPath鼠标操作文本的介绍和使用
一.鼠标(mouse)操作的介绍 模拟用户使用鼠标操作的一种行为,例如单击,双击,悬浮.根据作用对象的不同我们可以分为对元素的操作.对文本的操作和对图像的操作 二.鼠标对文本的操作在UiPath中的使 ...
- [转载]3.3 UiPath鼠标操作图像的介绍和使用
一.鼠标(mouse)操作的介绍 模拟用户使用鼠标操作的一种行为,例如单击,双击,悬浮.根据作用对象的不同我们可以分为对元素的操作.对文本的操作和对图像的操作 二.鼠标对图像的操作在UiPath中的使 ...
- selenium webdriver学习(二)————对浏览器的简单操作(转载JARVI)
selenium webdriver学习(二)————对浏览器的简单操作 博客分类: Selenium-webdriver selenium webdriver对浏览器的简单操作 打开一个测试浏览 ...
- 【Selenium02篇】python+selenium实现Web自动化:鼠标操作和键盘操作!
一.前言 最近问我自动化的人确实有点多,个人突发奇想:想从0开始讲解python+selenium实现Web自动化测试,请关注博客持续更新! 这是python+selenium实现Web自动化第二篇博 ...
- WPF 中模拟键盘和鼠标操作
转载:http://www.cnblogs.com/sixty/archive/2009/08/09/1542210.html 更多经典文章:http://www.qqpjzb.cn/65015.ht ...
随机推荐
- js关于时间(date)的比较
之前在工作上遇到一个问题:使用一些时间插件,如果有俩个时间,要判断结束时间和开始时间的大小?后来就查找了一些资料,这边整理出俩个比较简便的方法. 在这我拿 laydate.js 这个插件来举例: 首先 ...
- RPC简单设计方案
服务端: 启动后,等待客户端发来信息,收到信息后进行处理,返回结果. 客户端: 主线程中发起一次RPC,那么就将信息封装成一个任务,提交到线程池,阻塞等待结果. 线程池中工作线程执行任务,发送信息,等 ...
- 使用 FRP 让部门同事都能直接远程桌面办公( 适用于 TEAM 和向日葵卡顿的用户)
背景说明 这两天由于疫情的原因,很多公司都得在家远程上班,然后像我们这类小公司有没有 VPN 这些东西.传统的远程回公司只能依靠 Teamviewer 或者向日葵等工具.但是由于最近用户量很多,可能会 ...
- 链表基本操作与排序(c语言)
本设计程序用C编写,完成单链表的生成,任意位置的插入.删除,以及确定某一元素在单链表中的位置.实现三种排序算法-冒泡排序.快速排序.合并排序.产生四个长度为100,1000,10000,50000的随 ...
- Codeforces_834
A.两个方向都判断. #include<bits/stdc++.h> using namespace std; string s1,s2; map<char,int> mp; ...
- android项目上传github
很简单
- ThinkPHP5.1学习笔记 数据库操作
数据库 参见<Thinkphp5.1完全开发手册>学习 Mirror王宇阳 数据库连接 ThinkPHP采用内置抽象层对数据库操作进行封装处理:且基于PDO模式,可以适配各种数据库. 数据 ...
- CentOS8 上安装Docker
从 2017 年 3 月开始 docker 在原来的基础上分为两个分支版本: Docker CE 和 Docker EE.Docker CE 即社区免费版,Docker EE 即企业版,强调安全,但需 ...
- Vsftpd: 基于PAM认证的虚拟用户和匿名用户
目录 环境说明效果说明及截图①. 安装组件②. 系统账户建立③. 编辑vsftpd的配置文件④. 生成虚拟用户的数据库文件⑤. 生成一个使用vsftpd_login.db数据文件的PAM认证文件⑥. ...
- get post 区别【转】
应该是最简洁直接的了???? Get:是以实体的方式得到由请求URI所指定资源的信息,如果请求URI只是一个数据产生过程,那么最终要在响应实体中返回的是处理过程的结果所指向的资源,而不是处理过程的描述 ...