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_对浏览器操作、鼠标操作等总结的更多相关文章

  1. Selenium_模拟键盘和鼠标操作(9)

    模拟键盘键盘和鼠标操作主要使用到selenium的keys包,源码如下 class Keys(object): """ Set of special keys codes ...

  2. Selenium基础知识(二)鼠标操作

    一.鼠标操作 这个需要使用webdriver下的ActionChains类,这个类是操作鼠标操作的: from selenium.webdriver import ActionChains 鼠标操作可 ...

  3. 【转载】WebDriver常用的鼠标/键盘操作

    注:driver为一个WebDriver的实例,xpath为一个元素的xpath字符串,在本文中一律采用xpath的方式定位元素 1.鼠标右键点击操作:Actions action = new Act ...

  4. [转载]3.1 UiPath鼠标操作元素的介绍和使用

    一.鼠标(mouse)操作的介绍 模拟用户使用鼠标操作的一种行为,例如单击,双击,悬浮.根据作用对象的不同我们可以分为对元素的操作.对文本的操作和对图像的操作 二.鼠标对元素的操作在UiPath中的使 ...

  5. [转载]3.2 UiPath鼠标操作文本的介绍和使用

    一.鼠标(mouse)操作的介绍 模拟用户使用鼠标操作的一种行为,例如单击,双击,悬浮.根据作用对象的不同我们可以分为对元素的操作.对文本的操作和对图像的操作 二.鼠标对文本的操作在UiPath中的使 ...

  6. [转载]3.3 UiPath鼠标操作图像的介绍和使用

    一.鼠标(mouse)操作的介绍 模拟用户使用鼠标操作的一种行为,例如单击,双击,悬浮.根据作用对象的不同我们可以分为对元素的操作.对文本的操作和对图像的操作 二.鼠标对图像的操作在UiPath中的使 ...

  7. selenium webdriver学习(二)————对浏览器的简单操作(转载JARVI)

    selenium webdriver学习(二)————对浏览器的简单操作 博客分类: Selenium-webdriver   selenium webdriver对浏览器的简单操作 打开一个测试浏览 ...

  8. 【Selenium02篇】python+selenium实现Web自动化:鼠标操作和键盘操作!

    一.前言 最近问我自动化的人确实有点多,个人突发奇想:想从0开始讲解python+selenium实现Web自动化测试,请关注博客持续更新! 这是python+selenium实现Web自动化第二篇博 ...

  9. WPF 中模拟键盘和鼠标操作

    转载:http://www.cnblogs.com/sixty/archive/2009/08/09/1542210.html 更多经典文章:http://www.qqpjzb.cn/65015.ht ...

随机推荐

  1. scrapy-redis分布式爬虫实战

    Scrapy-Redis代码实战 Scrapy 是一个通用的爬虫框架,但是不支持分布式,Scrapy-redis是为了更方便地实现Scrapy分布式爬取,而提供了一些以redis为基础的组件(仅有组件 ...

  2. Go语言之路—博客目录

    Go语言介绍 为什么你应该学习Go语言? 开发环境准备 从零开始搭建Go语言开发环境 VS Code配置Go语言开发环境 Go语言基础 Go语言基础之变量和常量 Go语言基础之基本数据类型 Go语言基 ...

  3. tensorflow MNIST Convolutional Neural Network

    tensorflow MNIST Convolutional Neural Network MNIST CNN 包含的几个部分: Weight Initialization Convolution a ...

  4. Codeforces Round #470 (Div. 2) A Protect Sheep (基础)输入输出的警示、边界处理

    Bob is a farmer. He has a large pasture with many sheep. Recently, he has lost some of them due to w ...

  5. git push 的解决方案

    如果输入$ git push origin master 提示出错信息: 或者 失败的原因:不能 push 远端仓库 原因分析:由于你当前分支落后与远程端对应分支,所以无法更新: 解决方案:使用 gi ...

  6. sparc v8 汇编语言语法

    1.3.1 Labeling Format Symbol names beginning with a dot (.) are assumed to be local symbols. Names b ...

  7. Shell脚本 小程序演示

    一般的shell编程 场景贯穿了几个熟知的步骤: ●显示消息●获取用户输入●存储值到文件●处理存储的数据 这里写一个小程序 包含以上几部 #!/bin/bash while true do #echo ...

  8. [Linux]命令返回值以及错误对照表

    Linux执行完命令之后默认会有一个返回值 # ls app backupconfig.json Doc manage.py __pycache__ settings.py # echo $? 0 错 ...

  9. Django设置异步任务

    1.安装Django-celery 包:pip install django-celery==3.2.2 2.开启redis服务 需要使用redis做broker,所以在使用异步和定时任务时需要开启r ...

  10. echarts 的 formatter用法

    前言:formatter格式化方法.使用formatter调用自定义的数据,把内容通过处理让变成我们想要的样子. 比如,echarts数据显示是这样的(bug:部分内容被隐藏掉了,显示太长,不美观) ...