PyQt5相關控件 【持續完善中】

PyQt5相關控件 在Python3.7下運行

tushare是金融數據庫

import sys
import random
import time
import matplotlib
matplotlib.use("Qt5Agg")
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow, QMenu, QVBoxLayout, QSizePolicy, QMessageBox, QWidget
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
import numpy as np
from function import *
import pandas as pd
import tushare as ts

class EmbTerminal(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(EmbTerminal, self).__init__(parent)
        self.process = QtCore.QProcess(self)
        self.terminal = QtWidgets.QWidget(self)
        layout = QtWidgets.QVBoxLayout(self)
        layout.addWidget(self.terminal)
        # Works also with urxvt:
        self.process.start('python')
        self.setFixedSize(640, 480)

class Ui_MainWindow(object):
	def setupUi(self, MainWindow):
		MainWindow.setObjectName("MainWindow")
		self.screen = QtWidgets.QDesktopWidget().screenGeometry()
		MainWindow.setGeometry(10, 50, self.screen.width()/4,self.screen.height()/4)
		# MainWindow.resize(self.screen.width()/4,self.screen.height()/4)
		# MainWindow.showMaximized()
		self.centralWidget = QtWidgets.QWidget(MainWindow)
		self.centralWidget.setObjectName("centralWidget")
		MainWindow.setCentralWidget(self.centralWidget)
####################################################################################
		#gL
		self.gL = QtWidgets.QGridLayout(self.centralWidget)
		# self.gridLayout.setContentsMargins(11, 11, 11, 11)
		self.gL.setSpacing(6)
		self.gL.setObjectName("gL")
		#
		#QHBoxLayout
		self.hL1 = QtWidgets.QHBoxLayout()
		self.hL1.setSpacing(6)
		self.hL1.setObjectName("hL1")
		self.gL.addLayout(self.hL1,0,0)
		#
		#GridLayout
		self.gL1 = QtWidgets.QGridLayout(self.centralWidget)
		self.gL1.setContentsMargins(11, 11, 11, 11)
		self.gL1.setSpacing(6)
		self.gL1.setObjectName("gL1")
		self.gL.addLayout(self.gL1,0,1)
		#
		#QFrame
		self.center = QtWidgets.QFrame()
		# self.center.resize(100,100)
		self.center.setFrameShape(QtWidgets.QFrame.StyledPanel)
		self.gL1.addWidget(self.center,0,0,2,2)
		self.framelayout = QtWidgets.QGridLayout() 
		self.center.setLayout(self.framelayout)
		#
		#QLabel
		self.l1 = QtWidgets.QLabel(r'用戶名:')
		self.l1.setObjectName('l1')
		self.framelayout.addWidget(self.l1,0,0)
		#
		#QLabel
		self.l2 = QtWidgets.QLabel(r'密 碼:')
		self.l2.setObjectName('l2')
		self.framelayout.addWidget(self.l2,1,0)
		#
		#LineEdit
		self.e1 = QtWidgets.QLineEdit()
		self.e1.setValidator(QtGui.QIntValidator())
		self.e1.setMaxLength(6)
		self.e1.setAlignment(QtCore.Qt.AlignRight)
		self.e1.setObjectName('e1')
		self.e1.setFont(QtGui.QFont("Arial",10))
		self.framelayout.addWidget(self.e1,0,1)
		#
		#LineEdit
		self.e2 = QtWidgets.QLineEdit()
		self.e2.setValidator(QtGui.QIntValidator())
		self.e2.setMaxLength(6)
		self.e2.setAlignment(QtCore.Qt.AlignRight)
		self.e2.setObjectName('e2')
		self.e2.setFont(QtGui.QFont("Arial",10))
		self.framelayout.addWidget(self.e2,1,1)
		#
		#QPushButton
		self.bt1 = QtWidgets.QPushButton("OK")
		self.bt1.setObjectName("bt1")
		self.framelayout.addWidget(self.bt1,1,2)
		#
		#Qlist
		self.listwidget  =  QtWidgets.QListWidget()
		self.listwidget.addItems({"a":3,"b":4})
		self.gL1.addWidget(self.listwidget,2,0)
		self.listwidget.itemClicked.connect(self.itemclicked)
		#QTree
		self.treewidget  = QtWidgets.QTreeWidget()
		self.treewidget.setHeaderLabels(['This','is','a','TreeWidgets!'])
		self.root = QtWidgets.QTreeWidgetItem(self.treewidget)
		self.child1 =  QtWidgets.QTreeWidgetItem(self.root)
		self.child1.setText(0,'child1')
		self.child1.setText(1,'name1')
		self.child2 = QtWidgets.QTreeWidgetItem(self.child1)
		self.child2.setText(0,'1231')
		self.gL1.addWidget(self.treewidget,2,1)
		#
		self.bt1.clicked.connect(self.showDialog)
		#
		#QSplit
		self.splitter = QtWidgets.QSplitter(orientation=QtCore.Qt.Horizontal)
		self.gL.addWidget(self.splitter,2,1)
		self.splitter.setSizes([self.splitter.size().height() * 0.3, self.splitter.size().height() * 0.3,self.splitter.size().height() * 0.4])
		#
		#QTextEdit
		self.textedit = QtWidgets.QTextEdit()
		self.splitter.addWidget(self.textedit)
		#
		#QTab
		self.wdg1 = QtWidgets.QWidget()
		self.wdg2 = QtWidgets.QWidget()
		self.wdg3 = QtWidgets.QWidget()
		#
		self.tabWidget = QtWidgets.QTabWidget()
		self.splitter.addWidget(self.tabWidget)
		#
		self.tabWidget.addTab(self.wdg1, 'Wdg 1')
		self.wdg1_layout = QtWidgets.QVBoxLayout() 
		self.wdg1.setLayout(self.wdg1_layout)
		#
		self.tabWidget.addTab(self.wdg2, 'Wdg 2')
		self.wdg2_layout = QtWidgets.QVBoxLayout() 
		self.wdg2.setLayout(self.wdg2_layout)
		self.wdg2_pixMap =  QtGui.QPixmap('test_image1.png')
		self.wdg2_label = QtWidgets.QLabel()
		self.wdg2_label.setPixmap(self.wdg2_pixMap)
		self.wdg2_layout.addWidget(self.wdg2_label)
		#
		#Qprocess
		# self.wdg3_layout = QtWidgets.QVBoxLayout() 
		# self.wdg3.setLayout(self.wdg1_layout)
		self.tabWidget.addTab(EmbTerminal(),'IPYTHON')

		#QCheck
		self.checkbox = QtWidgets.QCheckBox("Awesome?")
		self.checkbox.stateChanged.connect(self.clickBox)
		self.splitter.addWidget(self.checkbox)
		#
		#Canvas
		self.main_widget = QWidget()
		self.sc = MyStaticMplCanvas(self.main_widget, width=5, height=4, dpi=100)
		self.wdg1_layout.addWidget(self.sc)
		#
		#QGroupBox
		self.echoGroup =  QtWidgets.QGroupBox('Echo')
		self.echoLayout = QtWidgets.QGridLayout()
		self.echoGroup.setLayout(self.echoLayout)
		self.echoLabel = QtWidgets.QLabel('Mode:')
		self.echoLayout.addWidget(self.echoLabel,0,0)
		self.framelayout.addWidget(self.echoGroup,0,2)
		#QCombox
		self.comboLayout = QtWidgets.QGridLayout()
		self.combobox2 = QtWidgets.QComboBox(minimumWidth=200)
		self.comboLayout.addWidget(QtWidgets.QLabel("增加單項,不帶數據"))
		self.comboLayout.addWidget(self.combobox2)
		self.comboLayout.addItem(QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding,QtWidgets.QSizePolicy.Minimum))
		items_list=["C","C++","Java","Python","JavaScript","C#","Swift","go","Ruby","Lua","PHP"]
		datas_list=[1972,1983,1995,1991,1992,2000,2014,2009,1995,1993,1995]
		for i in range(len(items_list)):
			self.combobox2.addItem(items_list[i],datas_list[i])
		self.combobox2.setCurrentIndex(-1)
		self.combobox2.activated.connect(self.on_combobox2_Activate)
		self.gL.addWidget(self.combobox2,1,2)
		#QTable
		self.dataTable = QtWidgets.QTableWidget()
		df = ts.realtime_boxoffice()
		self.dataTable.setRowCount(1)
		self.dataTable.setColumnCount(1)
		self.gL.addWidget(self.dataTable,2,2)
		#
		#QFileDir
		self.btn2 = QtWidgets.QPushButton("輸入文件")
		self.echoLayout.addWidget(self.btn2)
		self.btn2.clicked.connect(self.filedirgetfile)
		#
		#QFileDir
		self.btn3 = QtWidgets.QPushButton("輸出文件")
		self.echoLayout.addWidget(self.btn3)
		self.btn3.clicked.connect(self.filedirsavefile)
		#
		self.sp_testing_x = QtWidgets.QDoubleSpinBox()
		self.sp_testing_x.setDecimals(0)
		self.echoLayout.addWidget(self.sp_testing_x,0,1)
		self.sp_testing_x.setRange(0,9999)
		self.sp_testing_x.valueChanged.connect(lambda: self.dc.update_figure(self.DSGZ_args()))
###################################################################################
	def showDialog(self):
		# MessageBox
		QtWidgets.QMessageBox.information(self.bt1,'標題','消息對話框正文',QMessageBox.Yes | QMessageBox.No,QMessageBox.Yes)
		#
	def itemclicked(self,item):
		print (item.text())
	def clickBox(self, state):
		if state == QtCore.Qt.Checked:
			print('Checked')
		else:
			print('Unchecked')
	def on_combobox2_Activate(self, index):
		print(self.combobox2.currentText())
		print(self.combobox2.currentData())
	def filedirgetfile(self):
		self.filedir,_ = QtWidgets.QFileDialog.getOpenFileName(caption='打開文件',directory="C:\\Users\\yujin.wang\\Desktop\\New folder",filter="CSV files(*.txt *.csv)")
		df = pd.read_csv(self.filedir)
		# df = ts.realtime_boxoffice()
		self.dataTable.setRowCount(np.shape(df)[0])
		self.dataTable.setColumnCount(np.shape(df)[1])
		self.dataTable.setHorizontalHeaderLabels(df.columns)
		for i in range(np.shape(df)[0]):
			for j in range(np.shape(df)[1]):
				self.dataTable.setItem(i,j,QtWidgets.QTableWidgetItem(str(df.iloc[i,j])))
	def filedirsavefile(self):
		self.headers = []
		# print (self.dataTable.horizontalHeaderItem(1))
		for column in range(self.dataTable.columnCount()):
			header = self.dataTable.horizontalHeaderItem(column)
			self.headers.append(header.text())
		len1 = len(self.dataTable.horizontalHeader())
		# print (len(self.dataTable.horizontalHeader()))
		# print (self.dataTable.rowCount(),self.dataTable.columnCount())
		data = []
		for i in range(self.dataTable.rowCount()):
			temp = []
			for j in range(len1):
				cell = self.dataTable.item(i,j)
				if cell is not None and cell.text() != '':
					temp.append(cell.text())
				else:
					temp.append(' ')
			data.append(temp)
		dd = pd.DataFrame(data,columns = self.headers)
				# dd.append([self.dataTable.item(i,j).text() for j in range(len1)])
		self.filedir,_ = QtWidgets.QFileDialog.getSaveFileName(caption='打開文件',directory="C:\\Users\\yujin.wang\\Desktop\\New folder",filter="CSV files(*.txt *.csv)")
		print (dd)
		dd.to_csv(self.filedir)
		
####################################################################################
if __name__ == "__main__":
	app = QtWidgets.QApplication(sys.argv)
	ex = Ui_MainWindow()
	w = QtWidgets.QMainWindow()
	ex.setupUi(w)
	w.show()
	sys.exit(app.exec_())
####################################################################################

相關庫

import sys
import random
import time
import matplotlib
matplotlib.use("Qt5Agg")
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow, QMenu, QVBoxLayout, QSizePolicy, QMessageBox, QWidget
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
from numpy import arange, sin, pi
import tushare as ts


class MyMplCanvas(FigureCanvas):#畫布基類
	"""這是一個窗口部件,即QWidget(當然也是FigureCanvasAgg)"""
	def __init__(self, parent=None, width=50, height=50, dpi=100):
		fig = Figure(figsize=(width, height), dpi=dpi)
		self.axes = fig.add_subplot(111)
		# 每次plot()調用的時候,我們希望原來的座標軸被清除(所以False)
		self.compute_initial_figure()
 
		#
		FigureCanvas.__init__(self, fig)
		self.setParent(parent)
 
		FigureCanvas.setSizePolicy(self,
									QSizePolicy.Expanding,
									QSizePolicy.Expanding)
		self.axes.set_xlabel('x')
		self.axes.set_ylabel('y')
		FigureCanvas.updateGeometry(self)
 
	def compute_initial_figure(self):
		pass
 
class MyStaticMplCanvas(MyMplCanvas):#單個畫布
	"""靜態畫布:一條正弦線"""
	def compute_initial_figure(self):
		t = arange(0.0, 3.0, 0.01)
		s = sin(4*pi*t)
		self.axes.plot(t, s)
 
class MyControlMplCanvas(MyMplCanvas):#單個畫布
	"""動態畫布:每秒自動更新,更換一條折線。"""
	def __init__(self, *args, **kwargs):
		MyMplCanvas.__init__(self, *args, **kwargs)
		timer = QtCore.QTimer(self)
		timer.timeout.connect(self.update_figure)
		timer.start(1000)
 
	def compute_initial_figure(self):
		self.axes.plot([0, 0, 0, 0], [1, 2, 3, 4], 'r')
 
	def update_figure(self,x):
		# 構建4個隨機整數,位於閉區間[0, 10]
		t = arange(0.0, 3.0, 0.01)
		s = sin(2*pi*t+x/100.*2*pi)
		self.axes.cla()
		self.axes.plot(df.time, df.price ,'r')
		self.axes.set_xlabel('time')
		self.axes.set_ylabel('pRICE')
		self.draw()
 
class MyDynamicMplCanvas(MyMplCanvas):#單個畫布
	"""動態畫布:每秒自動更新,更換一條折線。"""
	def __init__(self, *args, **kwargs):
		MyMplCanvas.__init__(self, *args, **kwargs)
		timer = QtCore.QTimer(self)
		timer.timeout.connect(self.update_figure)
		timer.start(10000)
 
	def compute_initial_figure(self):
		self.axes.plot([0, 1, 2, 3], [1, 2, 0, 4], 'r')
 
	def update_figure(self,stock_id=str(600848),cur_date=time.strftime("%Y-%m-%d",time.gmtime())):
		# 構建4個隨機整數,位於閉區間[0, 10]
		df = ts.get_tick_data(stock_id,date=cur_date,src='tt')
		self.axes.cla()
		self.axes.plot(df.time, df.price ,'r')
		self.axes.set_xlabel('time')
		self.axes.set_ylabel('price')
		self.draw()
		

	

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章