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. CCF_201512-1_数位之和

    水. #include<iostream> #include<cstdio> using namespace std; int main() { ; cin >> ...

  2. WeChall_PHP 0817 (PHP, Exploit)

    I have written another include system for my dynamic webpages, but it seems to be vulnerable to LFI. ...

  3. Vmware 6.5:vmware vm高可用-vSphere HA & Fault Tlerance

    目录 vmware HA介绍 服务器添加存储,将存储挂载到服务器上 vcenter安装配置 群集配置 故障迁移测试 下载地址:百度云 参考文档: vmware HA介绍 vmware vm高可用至少需 ...

  4. Descriptor - Python 描述符协议

    描述符(descriptor) descriptor 是一个实现了 __get__. __set__ 和 __delete__ 特殊方法中的一个或多个的. 与 descriptor 有关的几个名词解释 ...

  5. git-gitlab-github集合

    git-gitlab-github集合 git(一):     git简介 git(二):     git安装和简单使用 git(三):     git的分支管理 git(四):     git的远程 ...

  6. C#中HashSet的重复性与判等运算重载

    目录 一个故事-- 一个繁荣的遥远国度:泛型容器 但是我也不确定容器里能放些什么东西啊 一个英勇的皇家骑士:HashSet 值类型的HashSet 引用类型的HashSet 另外一个--故--事?? ...

  7. make: *** No targets specified and no makefile found. Stop.错误

    # make make: *** No targets specified and no makefile found. Stop. # yum install gcc gcc-c++ gcc-g77 ...

  8. typescript点滴

    typescript比较优质的学习资料都放在前端资料汇总 这些都是为了自己更好的理解和记忆而不是为了学术性的博客. 这里讲的是一些容易忘记的.混淆的. #### typescript的模块的导入3种方 ...

  9. 浮动和包含框的关系,伪元素after解决高度塌陷

    浮动会使元素尽量向左或向右移动,直到碰到包含框或另外一个浮动元素的盒子模型的边缘 包含框并不会改变里面浮动元素的宽高,浮动元素宽高不会限制在包含块以内 <!DOCTYPE html> &l ...

  10. PyQt5官方教程+帮助文档+模块功能汇总

    写在开头 笔者自学PyQt5的过程中,在网上发现了不少友好的新手入门教程,比如: Archi的博客 PyQt5图形界面编程 但是学习PyQt5的最好方法是阅读官方文档 + 自己动手实践,笔者将分享官网 ...