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. Unreal Engine 4 蓝图完全学习教程(一)—— 简要介绍

    首先启动UE4: 新建项目类型为游戏: 选择空项目Blank: 项目设置选项: 点击创建项目: 打开后的窗口称为:“关卡编辑器”,由多个面板组成.在UE中,设计3D场景的空间称为“关卡”. 简单介绍一 ...

  2. Spring(五)核心容器 - 注册 Bean、BeanDefinitionRegistry 简介

    目录 前言 正文 1.BeanDefinitionRegistry 简介 2.registerBeanDefinition 方法注册 Bean 最后 前言 上篇文章我们对 BeanDefinition ...

  3. Android 开启与关闭软键盘

    http://www.cnblogs.com/weixing/p/3300908.html InputMethodManager imm = (InputMethodManager)getSystem ...

  4. Qt实现简易计算器

    麻烦到不能再麻烦的实现,简单到不能再简单的思路. calc.h #ifndef CALC_H #define CALC_H #include <QtWidgets/QMainWindow> ...

  5. 《Python学习手册 第五版》 -第1章 问答环节

    第一章的主要内容是解疑答惑的,这个部分也是很适合初学者的,回答了大部分初学者所关注的问题 1.为什么使用Python,或者说Python的优点, 作者是分为两个部分来谈的,人们使用中的经验总结以及Py ...

  6. DRF框架的安装与使用

    目录 DRF框架的安装与配置 基于restful接口规范的接口设计 DRF框架的安装与配置 """ 1)安装 >: pip install djangorestfr ...

  7. 适合产品经理的十本书 From 俞军

    (转自俞军,如有侵权,请评论区留言,我会尽快删除:) 适合产品经理的十本书 俞军 入门三本书:社会心理学 阿伦森 插图第七版:特别好,适合成为“产品经理的第一本书”第一本经济学:经济学帮助人们洞察世事 ...

  8. 再次小结windows服务的编写

    2013-03-23 21:05 (分类:计算机程序) 其实很简单 void mian() { //服务的分派表    SERVICE_TABLE_ENTRY DispatchTable[] ={   ...

  9. nCompass-网络流量基础知识

    nCompass-网络流量基础知识 1.  流量分析基础知识 1.1  常见的流量分析方式: SNMP: 网管平台通过主动式获取设备接口流量信息. Flow:网络设备将穿越的数据流信息精简压缩打包. ...

  10. android button的selector

    实现按钮的selector <?xml version="1.0" encoding="utf-8"?> <selector xmlns:an ...