def __init__(self, width, height, numberLabels=3, heading='', *args, **kwargs): super(LabeledDonatChart, self).__init__(*args, **kwargs) # widget properties self.setObjectName('LabeledDonatChart') self.setFrameShape(qtwidgets.QFrame.StyledPanel) self.setFixedWidth(width) self.setFixedHeight(height) self.setContentsMargins(0, 0, 0, 0) # donut chart self.series = qtchart.QPieSeries() self.series.setHoleSize(0.6) self.chart = qtchart.QChart() self.chart.setBackgroundVisible(False) self.chart.addSeries(self.series) self.chart.legend().hide() self.chart.setMargins(qtcore.QMargins(0, 0, 0, 0)) self.chart.setMinimumWidth(width) self.chart.setMinimumHeight(height) self.chartView = LabeledChartView(width, height, numberLabels, heading, self.chart, self) self.chartView.setRenderHint(qtgui.QPainter.Antialiasing) self.layout = qtwidgets.QHBoxLayout(self) self.layout.setContentsMargins(0, 0, 0, 0) self.layout.addWidget(self.chartView)
def __init__(self, chartViewParent: QtChart.QChartView, *preset): super().__init__() self.__chart = QtChart.QChart() self.__chart.legend().hide() self.__chart.setMinimumHeight(180) self.__chart.setMargins(QtCore.QMargins(0, 0, 0, 0)) self.__series = QtChart.QPieSeries() self.__series.setHoleSize(0.58) self.__series.setPieSize(0.75) for i in range(8): ps = QtChart.QPieSlice(str(i), 1) ps.setExploded(True) ps.setExplodeDistanceFactor(RING_NORMAL) ps.clicked.connect(self.__slice_clicked) ps.hovered.connect(self.__slice_hovered) ps.doubleClicked.connect(self.__slice_dblclicked) self.__series.append(ps) self.__chart.addSeries(self.__series) chartViewParent.setRenderHint(QtGui.QPainter.Antialiasing, True) chartViewParent.setChart(self.__chart) self.__last_slice = self.__series.slices()[0]
def create_chart(percent): """Создает диаграмму""" # ядро диаграммы series = QtChart.QPieSeries() series.append("Верные", percent) series.append('Неверные', 100 - percent) series.setPieSize(30) # анимация диаграммы chart = QtChart.QChart() chart.addSeries(series) chart.setAnimationOptions(QtChart.QChart.SeriesAnimations) chart.setAnimationDuration(3000) chart.setTitle('Соотношение ответов') # шрифт диаграммы font = QtGui.QFont() font.setFamily('PT Sans') font.setPointSize(18) chart.setFont(font) chart.setTitleFont(font) # виджет диаграммы chartview = QtChart.QChartView(chart) chartview.setRenderHint(QtGui.QPainter.Antialiasing) dialog.fails_table.setMinimumWidth(434) dialog.diagram_frame.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred) dialog.verticalLayout_7.addWidget(chartview)
def slot_start_search(self): """ Calcola il volume """ QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.WaitCursor)) matrice_dati = self.get_lista_volumi() QtWidgets.QApplication.restoreOverrideCursor() # se la matrice è vuota esco if len(matrice_dati) == 0: return None # lista contenente le intestazioni intestazioni = ['Table name','Megabyte'] # creo un oggetto modello-matrice che va ad agganciarsi all'oggetto grafico lista self.lista_risultati = QtGui.QStandardItemModel() # carico nel modello la lista delle intestazioni self.lista_risultati.setHorizontalHeaderLabels(intestazioni) # creo le colonne per contenere i dati self.lista_risultati.setColumnCount(len(intestazioni)) # creo le righe per contenere i dati self.lista_risultati.setRowCount(len(matrice_dati)) y =0 # carico i dati presi dal db dentro il modello for row in matrice_dati: x = 0 for field in row: self.lista_risultati.setItem(y, x, QtGui.QStandardItem(str(field)) ) x += 1 y += 1 # carico il modello nel widget self.o_lst1.setModel(self.lista_risultati) # indico di calcolare automaticamente la larghezza delle colonne #self.o_lst1.resizeColumnsToContents() # calcolo totali e li visualizzo nelle varie unità di misura v_total_size = 0 for row in matrice_dati: v_total_size += row[1] self.l_tot_megabyte.setText( locale.format_string('%.2f', v_total_size, grouping=True) ) self.l_tot_gigabyte.setText( locale.format_string('%.2f', v_total_size/1000, grouping=True) ) self.l_tot_terabyte.setText( locale.format_string('%.2f', v_total_size/1000/1000, grouping=True) ) # creo lista di 3 elementi dove i primi due sono le due tabelle più grandi e la terza è lo spazio di tutto il resto if len(matrice_dati) > 2: v_name_tabel_1 = matrice_dati[0][0] v_size_tabel_1 = matrice_dati[0][1] v_name_tabel_2 = matrice_dati[1][0] v_size_tabel_2 = matrice_dati[1][1] v_name_tabel_3 = 'Other' v_size_tabel_3 = v_total_size - matrice_dati[0][1] - matrice_dati[1][1] # carico il grafico a torta con le tre fette calcolate sopra self.o_chart.removeAllSeries() series = QtChart.QPieSeries() series.append(v_name_tabel_1, v_size_tabel_1) series.append(v_name_tabel_2, v_size_tabel_2) series.append(v_name_tabel_3, v_size_tabel_3) series.setLabelsVisible() self.o_chart.addSeries(series)
def create_pie(self): pie = QtChart.QPieSeries() pie.append('1', 10) pie.append('2', 20) chart = QtChart.QChart() chart.addSeries(pie) #chart.setAnimationOptions(QtChart.SeriesAnimation) chartview = QtChart.QChartView(chart)
def get_serie_di_base(self): """ Imposta la serie di base 100% """ series = QtChart.QPieSeries() slice0 = series.append('100%', 1) slice0.setColor(QtGui.QColor(0, 160, 0, 100)) return series
def __init__(self, project): super().__init__() self.ui = Ui_Prepare() self.ui.setupUi(self) self.project = project self.last_hotword_index = 0 self.main_dataset = DataSet() # Init hotword list self.hotwords = self.project.project_info['hotwords'] for hotword in self.hotwords: self.ui.current_hotword.addItem(hotword) self.sample_classes = [None] + self.hotwords # Init directory list self.folder_list_layout = QtWidgets.QVBoxLayout() self.folder_list = [[] for i in range(len(self.hotwords) + 1)] self.pie_slices = [QtChart.QPieSlice("non-hotword ()", 0)] self.pie_slices.extend([QtChart.QPieSlice("{} ()".format(name), 0) for name in self.hotwords]) self.display_selected_directories(0) # Pie chart self.pie_series = QtChart.QPieSeries() for pie_slice in self.pie_slices: self.pie_series.append(pie_slice) self.pie_series.setHoleSize(0) self.pie_view = QtChart.QChartView() self.pie_view.setRenderHint(QtGui.QPainter.Antialiasing) self.pie_view.chart().layout().setContentsMargins(0,0,0,0) self.pie_view.chart().setMargins(QtCore.QMargins(0,0,0,0)) self.pie_view.chart().legend().setAlignment(QtCore.Qt.AlignRight) self.pie_view.chart().addSeries(self.pie_series) layout = QtWidgets.QVBoxLayout() layout.addWidget(self.pie_view) self.ui.graph_placeholder.setLayout(layout) #Connects self.ui.current_hotword.currentIndexChanged.connect(self.display_selected_directories) self.ui.add_folder_button.clicked.connect(self.add_folder) self.ui.test_subset_CB.stateChanged.connect(self.ui.test_subset_percent.setEnabled) self.ui.val_on_test_set_CB.stateChanged.connect(self.disable_validation_set) self.ui.training_percent.valueChanged.connect(self.on_trainsample_update) self.ui.validation_percent.valueChanged.connect(self.on_valsample_update) self.ui.test_percent.valueChanged.connect(self.on_testsample_update) self.ui.done_button.clicked.connect(self.on_done_clicked) self.ui.add_set_PB.clicked.connect(self.add_set)
def ballance_ui(self): g_box = QtWidgets.QGridLayout() self.total_balance = QtWidgets.QLabel("Toplam") self.checking_account = QtWidgets.QLabel("Vadesiz Hesap") self.deposit_account = QtWidgets.QLabel("Vadeli eHesap") self.total_balance_amount = QtWidgets.QLabel("{}".format(self.account.deposit_account+self.account.checking_account)) self.checking_account_amount = QtWidgets.QLabel("{}".format(self.account.checking_account)) self.deposit_account_amount = QtWidgets.QLabel("{}".format(self.account.deposit_account)) series = QtChart.QPieSeries() series.setHoleSize(0.35) series.append("Vadeli",self.account.deposit_account) series.append("Vadesiz",self.account.checking_account) chart = QtChart.QChart() chart.legend().hide() chart.addSeries(series) chart.createDefaultAxes() chart.setAnimationOptions(QtChart.QChart.SeriesAnimations) chart.legend().setVisible(True) chart.legend().setAlignment(QtCore.Qt.AlignLeft) chartview = QtChart.QChartView(chart) chartview.setRenderHint(QtGui.QPainter.Antialiasing) self.withdrawing_buton = QtWidgets.QPushButton("Para Çekme") self.bank_buton = QtWidgets.QPushButton("Para Yatırma") g_box.addWidget(self.total_balance,0,0) g_box.addWidget(self.checking_account,1,0) g_box.addWidget(self.deposit_account,2,0) g_box.addWidget(self.total_balance_amount,0,1) g_box.addWidget(self.checking_account_amount,1,1) g_box.addWidget(self.deposit_account_amount,2,1) g_box.addWidget(self.bank_buton,0,2) g_box.addWidget(self.withdrawing_buton,1,2) v_box = QtWidgets.QVBoxLayout() v_box.addWidget(chartview) v_box.addLayout(g_box) self.withdrawing_buton.clicked.connect(self.withdrawing) self.bank_buton.clicked.connect(self.bank) self.setLayout(v_box)
def __init__(self, data: list): #data: list of tuple (label, value, percent) QtChart.QChartView.__init__(self) self.pie_slices = [ QtChart.QPieSlice("{}- {} ({:.2}%)".format(*d), d[1]) for d in data ] # Pie chart self.pie_series = QtChart.QPieSeries() for pie_slice in self.pie_slices: self.pie_series.append(pie_slice) self.pie_series.setHoleSize(0) self.setRenderHint(QtGui.QPainter.Antialiasing) self.chart().layout().setContentsMargins(0, 0, 0, 0) self.chart().setMargins(QtCore.QMargins(0, 0, 0, 0)) self.chart().legend().setAlignment(QtCore.Qt.AlignRight) self.chart().addSeries(self.pie_series)
def init_graph(self): self.pieSlices = [] for hw in self.project.project_info['hotwords'] + ['non-hotword']: self.pieSlices.append(QtChart.QPieSlice("{} ()".format(hw), 0)) self.pie_series = QtChart.QPieSeries() for pie_slice in self.pieSlices: self.pie_series.append(pie_slice) self.pie_series.setHoleSize(0) self.pie_view = QtChart.QChartView() self.pie_view.setRenderHint(QtGui.QPainter.Antialiasing) self.pie_view.chart().layout().setContentsMargins(0,0,0,0) self.pie_view.chart().setMargins(QtCore.QMargins(0,0,0,0)) self.pie_view.chart().legend().setAlignment(QtCore.Qt.AlignBottom) self.pie_view.chart().addSeries(self.pie_series) layout = QtWidgets.QVBoxLayout() layout.addWidget(self.pie_view) self.ui.graph_placeholder.setLayout(layout)
def debt_ui(self): g_box = QtWidgets.QGridLayout() self.total_limit = QtWidgets.QLabel("Toplam limit") self.credit_avialable = QtWidgets.QLabel("Kullanılabilir limit") self.debt = QtWidgets.QLabel("Son ekstreden kalan borç") self.total_limit_amount = QtWidgets.QLabel("500") self.credit_avialable_amount = QtWidgets.QLabel(str(500 - self.account.debt) ) self.debt_amount = QtWidgets.QLabel("{}".format(self.account.debt)) series = QtChart.QPieSeries() series.append("Kullanılabilir limit",(500 - self.account.debt)) series.append("Kalan borç",self.account.debt) chart = QtChart.QChart() chart.legend().hide() chart.addSeries(series) chart.createDefaultAxes() chart.setAnimationOptions(QtChart.QChart.SeriesAnimations) chart.legend().setVisible(True) chart.legend().setAlignment(QtCore.Qt.AlignLeft) chartview = QtChart.QChartView(chart) chartview.setRenderHint(QtGui.QPainter.Antialiasing) g_box.addWidget(self.total_limit,0,0) g_box.addWidget(self.credit_avialable,1,0) g_box.addWidget(self.debt,2,0) g_box.addWidget(self.total_limit_amount,0,1) g_box.addWidget(self.credit_avialable_amount,1,1) g_box.addWidget(self.debt_amount,2,1) v_box = QtWidgets.QVBoxLayout() v_box.addWidget(chartview) v_box.addLayout(g_box) self.setLayout(v_box)
def coinTableChangedSlot(self): # update new values # todo: display all displayCurrencies taxCoinName = settings.mySettings.reportCurrency() numberOfDecimals = 4 # initialize local vars # total invested fiat totalInvestFiat = core.CoinValue() # total returned fiat totalReturnFiat = core.CoinValue() # fiat performance # fiatPerformance = core.CoinValue() # invested value of current holdings currentInvestNoFiat = core.CoinValue() # current value of current holdings (hypothetical) hypotheticalCoinValueNoFiat = core.CoinValue() # current performance of current holdings (hypothetical) # hypotheticalPerformanceNoFiat = core.CoinValue() # realized profit (relevant for tax) realizedProfit = core.CoinValue() # unrealized profit (would be relevant for tax if realized) # unrealizedProfit = core.CoinValue() # paid fees paidFees = core.CoinValue() # testing # currentInvestAll = core.CoinValue() # hypotheticalValueAll = core.CoinValue() # realizedProfitAll = core.CoinValue() if self.controller.tradeList.isEmpty(): startYear = datetime.datetime.now().year else: startYear = min([trade.date for trade in self.controller.tradeList]).year stopYear = datetime.datetime.now().year realizedProfitPerYear = {} paidFeesPerYear = {} fiatPerYear = {} taxProfitPerYear = {} rewardPerYear = {} for year in range(startYear, stopYear+1): realizedProfitPerYear[str(year)] = core.CoinValue() paidFeesPerYear[str(year)] = core.CoinValue() fiatPerYear[str(year)] = core.CoinValue() taxProfitPerYear[str(year)] = core.CoinValue() rewardPerYear[str(year)] = core.CoinValue() # calculate all needed values for coin in self.model: if coin.isFiat(): # calculate invested and returned fiat for trade in coin.trades: # only add fiat trade if partner trade is not fiat isFiatCryptoTrade = True if trade.tradePartnerId: if self.controller.tradeList.getTradeById(trade.tradePartnerId): if self.controller.tradeList.getTradeById(trade.tradePartnerId).isFiat(): isFiatCryptoTrade = False if isFiatCryptoTrade: if trade.amount < 0: totalInvestFiat.add(trade.getValue().mult(-1)) else: totalReturnFiat.add(trade.getValue()) # fiat invest/ return per year for year in range(startYear, stopYear + 1): startDate = datetime.date(year=year, month=1, day=1) endDate = datetime.date(year=year, month=12, day=31) if trade.date.date() >= startDate and trade.date.date() <= endDate: fiatPerYear[str(year)].add(trade.getValue()) else: # calculate value of portfolio currentInvestNoFiat.add(coin.initialValue) hypotheticalCoinValueNoFiat.add(coin.getCurrentValue()) realizedProfit.add(coin.getTotalProfit()) # calc fees per year for trade in coin.trades: if trade.tradeType == "fee": paidFees.add(trade.getValue()) for year in range(startYear, stopYear + 1): startDate = datetime.date(year=year, month=1, day=1) endDate = datetime.date(year=year, month=12, day=31) if trade.date.date() >= startDate and trade.date.date() <= endDate: paidFeesPerYear[str(year)].add(trade.getValue()) for year in range(startYear, stopYear + 1): startDate = datetime.date(year=year, month=1, day=1) endDate = datetime.date(year=year, month=12, day=31) taxProfitPerYear[str(year)].add(coin.getTimeDeltaProfitTaxable(startDate, endDate)) rewardPerYear[str(year)].add(coin.getTimeDeltaReward(startDate, endDate)) realizedProfitPerYear[str(year)].add(coin.getTimeDeltaProfit(startDate, endDate)) # fiat and coins # currentInvestAll.add(coin.initialValue) # hypotheticalValueAll.add(coin.getCurrentValue()) # realizedProfitAll.add(coin..getTotalProfit()) fiatPerformance = (totalReturnFiat-totalInvestFiat).div(totalInvestFiat).mult(100) hypotheticalPerformanceNoFiat = (hypotheticalCoinValueNoFiat.div(currentInvestNoFiat) - core.CoinValue().setValue(1)).mult(100) unrealizedProfit = hypotheticalCoinValueNoFiat - currentInvestNoFiat def setLabelColor(label, isPositiv): if isPositiv: label.setBodyColor(self.posColor.name()) else: label.setBodyColor(self.negColor.name()) # tax value chart self.currentValueChart.chartView.setText( [controls.floatToString(currentInvestNoFiat[taxCoinName], numberOfDecimals) + ' ' + taxCoinName, controls.floatToString(hypotheticalCoinValueNoFiat[taxCoinName], numberOfDecimals) + ' ' + taxCoinName, "%.2f%%" % hypotheticalPerformanceNoFiat[taxCoinName]]) self.currentValueChart.setLabelToolTip(['current invest', 'current value', 'performance']) if unrealizedProfit[taxCoinName] < 0: self.donutSliceInvested.setValue(currentInvestNoFiat[taxCoinName]+unrealizedProfit[taxCoinName]) self.donutSliceInvested.setColor(self.neutrColor) self.donutSlicePerformance.setValue(-unrealizedProfit[taxCoinName]) self.donutSlicePerformance.setColor(self.negColor) # self.donutSlicePerformance.setLabelColor(self.negColor) self.currentValueChart.chartView.setColor([self.neutrColor, self.negColor, self.negColor]) else: self.donutSliceInvested.setValue(currentInvestNoFiat[taxCoinName]) self.donutSliceInvested.setColor(self.neutrColor) self.donutSlicePerformance.setValue(unrealizedProfit[taxCoinName]) self.donutSlicePerformance.setColor(self.posColor) # self.donutSlicePerformance.setLabelColor(self.posColor) self.currentValueChart.chartView.setColor([self.neutrColor, self.posColor, self.posColor]) # fiat value chart self.currentFiatValueChart.chartView.setText( [controls.floatToString(totalInvestFiat[taxCoinName], numberOfDecimals) + ' ' + taxCoinName, controls.floatToString(hypotheticalCoinValueNoFiat[taxCoinName], numberOfDecimals) + ' ' + taxCoinName, controls.floatToString(totalReturnFiat[taxCoinName], numberOfDecimals) + ' ' + taxCoinName], qt.AlignCenter) self.currentFiatValueChart.setLabelToolTip(['fiat invest', 'current value', 'fiat return']) self.sliceFiatInvested.setValue(totalInvestFiat[taxCoinName]) self.sliceFiatInvested.setColor(self.neutrColor) self.sliceFiatReturn.setValue(totalReturnFiat[taxCoinName]) self.sliceFiatReturn.setColor(self.styleHandler.getQColor('PRIMARY')) self.sliceCoinValue.setValue(hypotheticalCoinValueNoFiat[taxCoinName]) if (hypotheticalCoinValueNoFiat[taxCoinName] + totalReturnFiat[taxCoinName]) \ < totalInvestFiat[taxCoinName]: self.sliceCoinValue.setColor(self.negColor) self.currentFiatValueChart.chartView.setColor([self.neutrColor, self.negColor, self.styleHandler.getQColor('PRIMARY')]) else: self.sliceCoinValue.setColor(self.posColor) self.currentFiatValueChart.chartView.setColor([self.neutrColor, self.posColor, self.styleHandler.getQColor('PRIMARY')]) # profit table years = [] for year in realizedProfitPerYear: years.append(year) self.profitTable.setRowCount(len(years)) self.profitTable.setVerticalHeaderLabels(years) for year, row in zip(realizedProfitPerYear, range(len(realizedProfitPerYear))): self.profitTable.setItem(row, 0, qtwidgets.QTableWidgetItem( controls.floatToString(realizedProfitPerYear[year][taxCoinName] + rewardPerYear[year][taxCoinName], 5) + ' ' + taxCoinName)) self.profitTable.setItem(row, 1, qtwidgets.QTableWidgetItem( controls.floatToString(taxProfitPerYear[year][taxCoinName] + rewardPerYear[year][taxCoinName], 5) + ' ' + taxCoinName)) self.profitTable.setItem(row, 2, qtwidgets.QTableWidgetItem( controls.floatToString(paidFeesPerYear[year][taxCoinName], 5) + ' ' + taxCoinName)) self.profitTable.setItem(row, 3, qtwidgets.QTableWidgetItem( controls.floatToString(fiatPerYear[year][taxCoinName], 5) + ' ' + taxCoinName)) # pie chart pieSeries = qtchart.QPieSeries() sortedModelIndex = sorted(range(len(self.model)), key=lambda x: self.model.coins[x].getCurrentValue()[taxCoinName], reverse=True) otherssum = core.CoinValue() try: topvalue = self.model.coins[sortedModelIndex[0]].getCurrentValue()[taxCoinName] except IndexError: topvalue = 0 for index in sortedModelIndex: coin = self.model.coins[index] if not coin.isFiat(): if coin.getCurrentValue()[taxCoinName] > topvalue/40 and \ coin.getCurrentValue()[taxCoinName] > abs(hypotheticalCoinValueNoFiat[taxCoinName]/75): pieSeries.append(coin.coinname, coin.getCurrentValue()[taxCoinName]) elif coin.getCurrentValue()[taxCoinName] > 0: otherssum.add(coin.getCurrentValue()) if otherssum[taxCoinName] > abs(hypotheticalCoinValueNoFiat[taxCoinName]/100): slice = pieSeries.append("others", otherssum[taxCoinName]) slice.setLabelVisible() # if len(pieSeries.slices()) > 5: # for slice in pieSeries.slices()[0:5]: # if slice.value() > hypotheticalCoinValueNoFiat[taxCoinName]/20: # slice.setLabelVisible() # else: for slice in pieSeries.slices(): if slice.value() > abs(hypotheticalCoinValueNoFiat[taxCoinName]/20): slice.setLabelVisible() color = [255, 75, 225] for slice in pieSeries.slices(): color = style.nextColor(color, 55) slice.setBrush(qtgui.QColor(*tuple(color))) slice.setLabelColor(qtgui.QColor(*tuple(color))) slice.setLabelPosition(qtchart.QPieSlice.LabelOutside) pieSeries.setHoleSize(0.6) self.portfolioChart.setSeries(pieSeries) portfolioChartLabels = [] for coin in hypotheticalCoinValueNoFiat: portfolioChartLabels.append(controls.floatToString(hypotheticalCoinValueNoFiat[coin], numberOfDecimals) + ' ' + coin) self.portfolioChart.chartView.setText(portfolioChartLabels, qt.AlignCenter) self.portfolioChart.chartView.setColor(self.neutrColor, False)
def __init__(self): super().__init__() self.setLayout(qtw.QVBoxLayout()) grpbxwidgt = qtw.QGroupBox() grpbxwidgt.setTitle("Visualization of Data") grpbxwidgt.setLayout(qtw.QVBoxLayout()) # BAR GRAPH self.series = qtch.QBarSeries() self.chart = qtch.QChart() self.chart.addSeries(self.series) self.chart.setTitle("<h5>Daily Income & Expense</h5>") self.chart.setAnimationOptions(qtch.QChart.SeriesAnimations) self.axis = qtch.QBarCategoryAxis() self.chart.createDefaultAxes() self.chart.setAxisX(self.axis,self.series) self.chart.axisY(self.series).setRange(0,10000) self.chart.axisY(self.series).setTitleText("Money (LKR)") self.chart.legend().setVisible(True) self.chart.legend().setAlignment(qtc.Qt.AlignBottom) self.chartview = qtch.QChartView(self.chart) self.chartview.setRenderHint(qtg.QPainter.Antialiasing) # PIE CHART self.pieseries = qtch.QPieSeries() self.piechart = qtch.QChart() self.piechart.addSeries(self.pieseries) self.piechart.setTitle("Item's Sold and Remaining") self.piechart.setAnimationOptions(qtch.QChart.AllAnimations) self.piechartview = qtch.QChartView(self.piechart) self.piechartview.setRenderHint(qtg.QPainter.Antialiasing) # selection widget product_widget = qtw.QGroupBox() product_widget.setTitle("Item Selection") product_layout = qtw.QHBoxLayout() product_widget.setLayout(product_layout) pushbutton = qtw.QPushButton("Filter",clicked = self.update_piechart) self.combobox = qtw.QComboBox(currentText = "select an item") self.c = ComboboxModel() #comboxlist model self.combobox.setModel(self.c.model) product_layout.addWidget(self.combobox) product_layout.addWidget(pushbutton) # calendar widget calendar_widget = qtw.QGroupBox() calendar_widget.setTitle("Date Selection") calendar_layout = qtw.QHBoxLayout() calendar_widget.setLayout(calendar_layout) # calculating the current month and current year current_month = int(datetime.now().month) current_year = int(datetime.now().year) date = qtc.QDate(current_year,current_month,1) self.to_date = qtw.QDateEdit() to_label = qtw.QLabel("To") self.to_date.setCalendarPopup(True) self.to_date.setDate(date) self.from_date = qtw.QDateEdit() from_label = qtw.QLabel("From") self.from_date.setCalendarPopup(True) self.from_date.setDate(qtc.QDate.currentDate()) pushbtn = qtw.QPushButton("Filter",clicked =self.update_data) calendar_layout.addWidget(to_label) calendar_layout.addWidget(self.to_date) calendar_layout.addWidget(from_label) calendar_layout.addWidget(self.from_date) calendar_layout.addWidget(pushbtn) # end of calendar widget self.chartview.setSizePolicy(qtw.QSizePolicy.Minimum,qtw.QSizePolicy.Expanding) self.piechartview.setSizePolicy(qtw.QSizePolicy.Minimum,qtw.QSizePolicy.Expanding) grpbxwidgt.layout().addWidget(calendar_widget) grpbxwidgt.layout().addWidget(self.chartview) grpbxwidgt.layout().addWidget(product_widget) grpbxwidgt.layout().addWidget(self.piechartview) self.layout().addWidget(grpbxwidgt)
from PyQt5 import QtChart from PyQt5.QtGui import QPainter import sys, os app = QApplication(sys.argv) w = QWidget() w.resize(250, 150) w.move(500, 300) w.setWindowTitle('Круговая диаграмма') w.setGeometry(100, 100, 680, 500) layout = QVBoxLayout() w.setLayout(layout) series = QtChart.QPieSeries() series.append("Jane", 1) series.append("Joe", 2) series.append("Andy", 3) series.append("Barbara", 4) series.append("Axel", 5) chart = QtChart.QChart() chart.addSeries(series) chart.setTitle('Простой пример круговой диаграммы') chartview = QtChart.QChartView(chart) chartview.setRenderHint(QPainter.Antialiasing) layout.addWidget(chartview) w.show()
def layoutUI(self): # self.setStyleSheet("background-color: white;") # self.setStyleSheet(" * {background-color: #ffffff} QFrame { border: 0px; background-color: #ffffff }") self.setStyleSheet( " * {{background-color: {0}}} QFrame {{ border: 0px; background-color: {0} }}" .format("#ff00ff")) # self.setObjectName("mainWindow") # self.setStyleSheet("#mainWindow { background-color: white; border: 0px white}") self.mainLayout = qtwidgets.QHBoxLayout(self) self.setContentsMargins(0, 0, 0, 0) self.sidebarFrame = qtwidgets.QFrame(self) self.sidebarFrame.setStyleSheet("background-color: red;") # self.sidebarFrame.setObjectName("sidebarFrame") # self.sidebarFrame.setStyleSheet("#sidebarFrame { background-color: white; border: 0px white}") self.sidebarFrame.setFrameShape(qtwidgets.QFrame.StyledPanel) self.sidebarFrame.setFrameShadow(qtwidgets.QFrame.Raised) self.sidebarFrame.setFixedWidth(120) self.contentFrame = qtwidgets.QFrame(self) # self.contentFrame.setStyleSheet("background-color: yellow;") # self.contentFrame.setObjectName("contentFrame") # self.contentFrame.setStyleSheet("#contentFrame { background-color: white; border: 0px white}") self.contentFrame.setFrameShape(qtwidgets.QFrame.StyledPanel) self.contentFrame.setFrameShadow(qtwidgets.QFrame.Raised) self.contentFrame2 = qtwidgets.QFrame(self) # self.contentFrame.setStyleSheet("background-color: yellow;") # self.contentFrame.setObjectName("contentFrame") # self.contentFrame.setStyleSheet("#contentFrame { background-color: white; border: 0px white}") self.contentFrame2.setFrameShape(qtwidgets.QFrame.StyledPanel) self.contentFrame2.setFrameShadow(qtwidgets.QFrame.Raised) # stacked content layout self.stackedLayout = qtwidgets.QStackedLayout() self.stackedLayout.addWidget(self.contentFrame) self.stackedLayout.addWidget(self.contentFrame2) self.statusbarFrame = qtwidgets.QFrame(self) self.statusbarFrame.setStyleSheet("background-color: blue;") # self.statusbarFrame.setObjectName("statusbarFrame") # self.statusbarFrame.setStyleSheet("#statusbarFrame { background-color: white; border: 0px white}") self.statusbarFrame.setFrameShape(qtwidgets.QFrame.StyledPanel) self.statusbarFrame.setFrameShadow(qtwidgets.QFrame.Raised) self.statusbarFrame.setFixedHeight(30) # buttons sidebar self.button1 = qtwidgets.QPushButton("b1", self.sidebarFrame) self.button2 = qtwidgets.QPushButton("b2", self.sidebarFrame) self.button3 = qtwidgets.QPushButton("b3", self.sidebarFrame) self.button4 = qtwidgets.QPushButton("b4", self.sidebarFrame) buttonHeight = 80 self.button1.setFixedHeight(buttonHeight) self.button2.setFixedHeight(buttonHeight) self.button3.setFixedHeight(buttonHeight) self.button4.setFixedHeight(buttonHeight) self.button1.clicked.connect( lambda: self.stackedLayout.setCurrentIndex(0)) self.button2.clicked.connect( lambda: self.stackedLayout.setCurrentIndex(1)) # self.lowerBtn.setFixedSize(50,10) # layout in lower frame self.sidebarVerticalLayout = qtwidgets.QVBoxLayout(self.sidebarFrame) self.sidebarVerticalLayout.addWidget(self.button1) self.sidebarVerticalLayout.addWidget(self.button2) self.sidebarVerticalLayout.addWidget(self.button3) self.sidebarVerticalLayout.addWidget(self.button4) self.sidebarVerticalLayout.addStretch() # content contentFrame # content items self.contentbutton = qtwidgets.QPushButton("some button", self.contentFrame) self.contentlabel = qtwidgets.QLabel("some text", self.contentFrame) mySeries = qtchart.QPieSeries() mySeries.append('BTC', 20000) mySeries.append('ETH', 60000) mySeries.append('LTC', 2000) # mySlice = mySeries.slices().at(1) # mySlice.setExploded() self.myChart = qtchart.QChart() self.myChart.addSeries(mySeries) # self.myChart.setTitle("chart example") self.myChart.legend().hide() self.myChartView = qtchart.QChartView(self.myChart) self.myChartView.setRenderHint(qtgui.QPainter.Antialiasing) # self.contentFrame.addWidget(self.myChartView) self.myTable = qtwidgets.QTableWidget(50, 8, self.contentFrame) self.myTable.horizontalHeader().setSectionResizeMode( qtwidgets.QHeaderView.Stretch) # layout content self.contentLayout = qtwidgets.QVBoxLayout(self.contentFrame) self.horzLayout1 = qtwidgets.QHBoxLayout() self.vertLayout1 = qtwidgets.QVBoxLayout() self.contentLayout.addLayout(self.horzLayout1) self.contentLayout.addWidget(self.myTable) self.horzLayout1.addLayout(self.vertLayout1) self.horzLayout1.addStretch() self.horzLayout1.addWidget(self.myChartView) self.vertLayout1.addWidget(self.contentbutton) self.vertLayout1.addWidget(self.contentlabel) self.vertLayout1.addStretch() # content contentFrame2 # content items self.pathlabel = qtwidgets.QLabel("Path:", self.contentFrame2) self.fileDialog = qtwidgets.QFileDialog(self.contentFrame2) # self.fileDialog.setFileMode(qtwidgets.QFileDialog.DirectoryOnly) self.pathEntry = qtwidgets.QLineEdit(self.contentFrame2) self.pathEntry.setPlaceholderText("enter Path/ drop file or folder") self.selectPathButton = qtwidgets.QPushButton("Select", self.contentFrame2) self.selectPathButton.clicked.connect(lambda: self.selectPath()) # layout content self.contentLayout2 = qtwidgets.QVBoxLayout(self.contentFrame2) self.horzLayout21 = qtwidgets.QHBoxLayout() self.contentLayout2.addLayout(self.horzLayout21) self.horzLayout21.addWidget(self.pathlabel) self.horzLayout21.addWidget(self.pathEntry) self.horzLayout21.addWidget(self.selectPathButton) # labels statusbar self.label1 = qtwidgets.QLabel("little bit status", self.statusbarFrame) font = qtgui.QFont("Arial", 10) self.label1.setFont(font) self.label2 = qtwidgets.QLabel("some more status", self.statusbarFrame) self.label2.setFont(font) # self.lowerBtn.setFixedSize(50,10) # layout in lower frame self.statusbarHorizontalLayout = qtwidgets.QHBoxLayout( self.statusbarFrame) self.statusbarHorizontalLayout.addWidget(self.label1) self.statusbarHorizontalLayout.addWidget(self.label2) self.statusbarHorizontalLayout.addStretch() # put frames in horizontal layout self.horizontalFrameLayout = qtwidgets.QHBoxLayout() self.horizontalFrameLayout.addWidget(self.sidebarFrame) self.horizontalFrameLayout.addLayout(self.stackedLayout) # put frames in vertical layout self.verticalFrameLayout = qtwidgets.QVBoxLayout() self.verticalFrameLayout.setSpacing(0) self.verticalFrameLayout.addLayout(self.horizontalFrameLayout) self.verticalFrameLayout.addWidget(self.statusbarFrame) # put subLayouts in main layout self.mainLayout.addLayout(self.verticalFrameLayout) self.show()
def create_chart(parent, data, title, axis_data=None, chart_type='pie'): # Create Pie Chart if chart_type == 'pie': # Create the data series and initialize it default_series = QtChart.QPieSeries() for (name, value, color, percentage) in data: sl = default_series.append(name, value) sl.setLabel(f"{name}\n({percentage:.2f}%)") sl.setBrush(color) # Modify series default_series.setPieSize(0.75) default_series.setLabelsVisible() default_series.setLabelsPosition(QtChart.QPieSlice.LabelOutside) # Create the chart chart = QtChart.QChart() chart.addSeries(default_series) chart.createDefaultAxes() chart.setAnimationOptions(QtChart.QChart.AllAnimations) chart.setTitle(title) chart.legend().setVisible(False) #chart.legend().setAlignment(QtCore.Qt.AlignBottom) chart.setBackgroundBrush(QtGui.QBrush(QtGui.QColor(225, 225, 225))) # Initialize a chart view chartview = QtChart.QChartView(chart) chartview.setRenderHint(QtGui.QPainter.Antialiasing) chartview.setMinimumSize(QtCore.QSize(600, 400)) chartview.setSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) return chartview # Line Chart else: default_series = QtChart.QLineSeries() for (x, y) in data: sl = default_series.append(x, y) # Create chart chart = QtChart.QChart() chart.addSeries(default_series) chart.setAnimationOptions(QtChart.QChart.SeriesAnimations) chart.setTitle(title) chart.legend().setVisible(False) chart.setBackgroundBrush(QtGui.QBrush(QtGui.QColor(225, 225, 225))) if axis_data is not None: axis_x = QtChart.QCategoryAxis() # Y-axis axis_x.setRange(axis_data['X']['Min'], axis_data['X']['Max']) axis_x.setTitleText(axis_data['X']['Title']) cur_tick = axis_data['X']['Max'] * 0.1 for i in range(len(axis_data['X']['Labels'])): axis_x.append(f"{axis_data['X']['Labels'][i]}", cur_tick) cur_tick += (float(axis_data['X']['Max']) / len(axis_data['X']['Labels'])) chart.addAxis(axis_x, QtCore.Qt.AlignBottom) axis_y = QtChart.QCategoryAxis() # Y-axis axis_y.setTitleText(axis_data['Y']['Title']) axis_y.setRange(axis_data['Y']['Min'], axis_data['Y']['Max']) axis_y.append('Easy', float(axis_data['Y']['Max']) * 0.1) axis_y.append('Moderate', float(axis_data['Y']['Max']) * 0.9) axis_y.append('Difficult', float(axis_data['Y']['Max']) * 1.3) chart.addAxis(axis_y, QtCore.Qt.AlignLeft) default_series.attachAxis(axis_x) default_series.attachAxis(axis_y) chartview = QtChart.QChartView(chart) chartview.setRenderHint(QtGui.QPainter.Antialiasing) chartview.setMinimumSize(QtCore.QSize(600, 400)) chartview.setSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) return chartview