Pqt5 grafik chart

Arkadaşlar çeşitli kripto platformalarında kripto alıp satıyorum. Buralara aktardığım para ve buralardaki mevcut coinlerin güncel durumlarını, bu alım satımları kayıt altına alacağım bir proğram yazmaya çalışıyorum. Genel olarak çoğu işi hallettim gibi. Pyqt 5 ile arayüz tasarladım sqlite 3 ile verileri tutuyorum bir sorun yok. Python ile kodlarını yazdım. Ama bu tasarladığım arayüzde birde bu platformlara aktardığım paranın grafiğini görmek istiyorum. Örnek: Binance =250$ , Gateİo =700$, Huobi =300$, Bitfinex=180$, BtcTürk=600$ para aktarmışım bu paraları bir pasta grafiği olarak arayüzde görmek istiyorum. Burda sorunum grafiği arayüz içinde görmek bunula ilgili türkçe bir kaynak bulamadım. Yabancı kaynakları da ya ben tam anlamıyorum yada iyi anlatan bir kaynak bulamadım.
Pyqt 5 ile tasarladığım arayüzü yani Uİ dosyasını py uzantılı dosyaya çevirip import ettim ve oraya hiç müdahele etmiyorum işlemlerimi ayrı bir kod sayfasında yapıyorum (ui yi import ettiğim yerde)
bu aşamada ui içindeki GraphicView Widgetinin içine bu (veya her hangi bir veri olabilir) verinin grafiğini nasıl çizdireceğimi bulamadım. Yardımcı olabilecek arkadaş varmı veya bu işi düzgünce anlatan bir kaynak (mümkünse türkçe) önerebilecek bir arkadaş varmı. ihtiyaç olmadığını düşünerek kod eklemedim ama ihtiyaç olursa kodları paylaşabilirim.

Merhaba;

Haklısınız çoğu kaynak yabancı dilde ve ne kadarını anladığınızı yada anlayamadığınızı bilmiyoruz. Ne denediğinizi ve nerede takıldığınızı da bir kodla örnekleseydiniz daha kolay olabilirdi.

Kolay yoldan bir elips çizdirip, bu elipslerden bir grafik oluşturulaibilirdi.

Tasarımınıza takılmadan bir örnek bırakıyorum.

from PyQt5 import QtChart
from PyQt5.QtWidgets import QApplication, QMainWindow
import sys
from PyQt5.QtChart import QChart, QChartView
from PyQt5.QtGui import QPainter
from PyQt5.QtCore import Qt


class Window(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("PyQtChart Pie Chart")
        self.setGeometry(100, 100, 800, 600)

        self.show()
        self.create_piechart()

    def create_piechart(self):
    
        #Binance =250$ , Gateİo =700$, Huobi =300$, Bitfinex=180$, BtcTürk=600$ 
         
        series = QtChart.QPieSeries()
        series.append("Binance", 250)
        series.append("CGateİo", 700)
        series.append("Huobi", 300)
        series.append("Bitfinex", 180)
        series.append("BtcTürk", 600)
        series.setLabelsVisible(True)

    
        series.setLabelsPosition(QtChart.QPieSlice.LabelInsideHorizontal)
        for slice in series.slices():
            slice.setLabel("{:.2f}%".format(100 * slice.percentage()))

        chart = QChart()
        chart.addSeries(series)
        chart.createDefaultAxes()
        chart.setAnimationOptions(QChart.SeriesAnimations)
        chart.setTitle("Financial Percentage Budget")
        chart.legend().setVisible(True)
        chart.legend().setAlignment(Qt.AlignBottom)

        chart.legend().markers(series)[0].setLabel("Binance")
        chart.legend().markers(series)[1].setLabel("CGateİo")
        chart.legend().markers(series)[2].setLabel("Huobi")
        chart.legend().markers(series)[3].setLabel("Bitfinex")
        chart.legend().markers(series)[4].setLabel("BtcTürk")

        chartview = QChartView(chart)
        chartview.setRenderHint(QPainter.Antialiasing)

        self.setCentralWidget(chartview)


if __name__ == '__main__':
    App = QApplication(sys.argv)
    window = Window()
    sys.exit(App.exec_())

Burada pyqttchart modülüne ihtiyaç duyacaksınız.

pip install pyqtchart

Komutu ile yükleyebilirsiniz.

Ardından kod çalışacaktır.

Verdiğiniz değerlere göre özellikle içinde bırakarak grafiği çizdirdim.

Siz bu değerleri sabit olarak kullanmayacaksınız tabi ki.

Bunun için;

def create_piechart(self):

Satırında parametre olarak girip, bu parametreleri,

        series.append("Binance", 250)
        series.append("CGateİo", 700)
        series.append("Huobi", 300)
        series.append("Bitfinex", 180)
        series.append("BtcTürk", 600)

Alacağınız değerleri buradaki sabit rakamlar yerine ilgili değişkenleri aktararak grafiğinizi kolayca çizdirebilirsiniz.

Kolay gelsin.

2 Beğeni

İlginiz için teşekkür ediyorum. Verdiğiniz kod tek başına çalışıyor. Ama ben bunu benim kodum içine nasıl aktaracağım bir türlü bulamadım. Kodu ekliyorum çalıştırdığınızda göreceksiniz karşınıza çıkan ekranda yan yana üç tane boş alan var. Onlar pyqt5 de oluştururken forma koyduğum Graphics Widgetler ben bunların içinde görünsün istiyorum grafik ( belki grafik göstermek için farklı bir widget koymam gerekiyor bilmiyorum ben isminden dolayı bu olabileceğini düşünerek koydum) eğen farklı bir widget koymam gerekiyorsa onu koyayım ama grafiğin orada bir köşede formun içinde görünmesini istiyorum. ui dosyasını py uzantılı dosyaya çevirdim (onu da ekliyorum ) kodu orda yazmıyorum. onu grafiksel olarak qt designer içinde tasarlayıp sonra py ye çevirdim. kodu main.py içinde yazıyorum ve oradaki widgetlere ve diğer unsurlara (combobax, lineedit vs.) main.py dosyasından ui.combobox… vesaire gibi ulaşıyorum. Bu haliyle sizin verdiğiniz kodu buraya main py içine nasıl entegre edeceğimi bulamadım. Yardımcı olursanız sevinirim.
Düzenleme notu : main dosyasını kod olarak paylaştım ama diğer ui dosyasının py ye çevrilmiş halini buraya paylaşamadım kelime sınırına takıldım. Dosya olarak paylaşabilmemin bir yolu varmı? Sizin gönderdiğim kodu çalıştırabilmeniz için db dosyası ve ui nin py dosyası gerekiyor sanırım. Bunların hepsini bir arada size nasıl paylaşabilirim?

# _______________________KÜTÜPHANELER_İMPORTLAR____________________#
# _________________________________________________________________#

import sys

import json
import requests

from PyQt5.QtWidgets import *
from Proje_coin_ui import *






# _______________________UYGULAMA OLUŞTURMA________________________#
# _________________________________________________________________#

Uygulama = QApplication(sys.argv)
penAna = QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(penAna)
penAna.show()

# _______________________VERİ TABANI İŞLEMLERİ_____________________#
# _________________________________________________________________#

import sqlite3

global curs
global conn
conn = sqlite3.connect("genel.db")
curs = conn.cursor()

ui.lb_if_vakif.setVisible(False)  # Vakıfbanka özel o seçilince görüntülenecek
ui.lineEdit.setVisible(False)  # vakıfbanka özel o seçilince görüntülenecek

# burası alım veya satım için combobox tan borsa seçilene kadar görünmeyecek
ui.combo_coin.setVisible(False)
ui.ln_miktar.setVisible(False)
ui.ln_alisfiyat.setVisible(False)
ui.ln_toplamodenen.setVisible(False)
ui.ln_birimmaliyet.setVisible(False)
ui.btn_aliskaydet.setVisible(False)

ui.combo_coins.setVisible(False)
ui.ln_miktars.setVisible(False)
ui.ln_satisfiyat.setVisible(False)
ui.ln_toplamodenens.setVisible(False)
ui.ln_karzarars.setVisible(False)
ui.btn_satiskaydet.setVisible(False)


# _______________________KODLAMA_FONKSİYON YAZIMI_____________________#
# ____________________________________________________________________#

def getprice(argumancoinadi):
    key = "https://api.binance.com/api/v3/ticker/price?symbol="
    url = key + argumancoinadi
    data = requests.get(url)
    data = data.json()
    return data['price']

def uygunmu(string: str) -> bool:
    try:
        sayı = float(string)
        return True
    except:
        return False
        # raise Exception()


def TABLOGOSTER(arguman):
    olmasi_gereken = 0.0
    tl_karsiligi = 0.0
    ui.tblwid_nereden.clear()
    ui.tblwid_nereden.setHorizontalHeaderLabels(
        ("ID", "TARİH", "YATIRILAN", "NERDEN", "ÇEKİLEN", "NEREYE", "OLMASI GEREKEN", "OLAN"))
    ui.tblwid_nereden.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
    curs.execute(f"SELECT * FROM {arguman}")
    for satirindex, satırveri in enumerate(curs):
        for sutunindex, sutunveri in enumerate(satırveri):
            ui.tblwid_nereden.setItem(satirindex, sutunindex, QTableWidgetItem(str(sutunveri)))
            try:
                if sutunindex == 6:
                    olmasi_gereken += float(sutunveri)
                if sutunindex == 7:
                    tl_karsiligi += float(sutunveri)
            except:
                pass

    ui.lb_nereden_tablo_2.setText(str(olmasi_gereken) + " $")

    if arguman == 'vakifhesap':
        ui.lb_nereden_tablo_3.setText(str(tl_karsiligi) + " TL")
    else:
        ui.lb_nereden_tablo_3.setText("")


def TABLOGOSTER1(arguman):
    olmasi_gereken = 0.0
    tl_karsiligi = 0.0
    ui.tblwid_nereye.clear()
    ui.tblwid_nereye.setHorizontalHeaderLabels(
        ("ID", "TARİH", "YATIRILAN", "NERDEN", "ÇEKİLEN", "NEREYE", "OLMASI GEREKEN", "OLAN"))
    ui.tblwid_nereye.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
    curs.execute(f"SELECT * FROM {arguman}")
    for satirindex, satırveri in enumerate(curs):
        for sutunindex, sutunveri in enumerate(satırveri):
            ui.tblwid_nereye.setItem(satirindex, sutunindex, QTableWidgetItem(str(sutunveri)))
            try:
                if sutunindex == 6:
                    olmasi_gereken += float(sutunveri)
                if sutunindex == 7:
                    tl_karsiligi += float(sutunveri)
            except:
                pass

    ui.lb_nereye_tablo_2.setText(str(olmasi_gereken) + " $")

    if arguman == 'vakifhesap':
        ui.lb_nereye_tablo_3.setText(str(tl_karsiligi) + " TL")
    else:
        ui.lb_nereye_tablo_3.setText("")


def AKTAR():
    while True:
        _date_hesap = ui.date_hesap.date().toString(QtCore.Qt.DateFormat.ISODate)
        _ln_aktar = ui.ln_aktar.text()
        _combob_nereden = ui.combob_nereden.currentText()
        _combob_nereye = ui.combob_nereye.currentText()

        if _ln_aktar == "":
            QMessageBox.question(penAna, "Lütfen Dikkkat!!!", "Aktarılan miktar boş bırakılamaz!.",
                                 QMessageBox.Ok)
            break

        if uygunmu(_ln_aktar):
            pass
        else:
            QMessageBox.question(penAna, "Lütfen Dikkkat!!!",
                                 "Girdiginiz sayının formatı uygun değil.!.Ondalık ayracı olarak nokta kullanın",
                                 QMessageBox.Ok)
            ui.ln_aktar.clear()
            break

        if _combob_nereden == "" or _combob_nereye == "":
            QMessageBox.question(penAna, "Lütfen Dikkkat!!!",
                                 "Hesap bölümleri boş olamaz her iki hesabıda seçtiğinizden emin olun!.",
                                 QMessageBox.Ok)
            break

        if _combob_nereden == _combob_nereye:
            QMessageBox.question(penAna, "Lütfen Dikkkat!!!",
                                 "Her iki hesapta aynı hesap olamaz, Ayrıca tarih seçmeyi unutmayın.", QMessageBox.Ok)
            ui.ln_aktar.clear()
            break

        _ln_aktary = '-' + _ln_aktar
        _combob_nereden += "hesap"
        _combob_nereye += "hesap"
        yatirilan = "0"

        if _combob_nereden == "vakifhesap":
            olan = ui.lineEdit.text()
            olan = "-" + olan
        else:
            olan = ""

        if ui.lineEdit.isVisible() and ui.lineEdit.text() == "":
            QMessageBox.question(penAna, "Lütfen Dikkkat!!!",
                                 "Türk Lirası karşılığını boş bırakamazsınız.", QMessageBox.Ok)
            break

        curs.execute(
            f'INSERT INTO {_combob_nereden} (tarih, yatirilan, nerden, cekilen, nereye, olmasigereken, olan) VALUES (?, ?, ?, ?, ?, ?, ?)',
            (_date_hesap, yatirilan, _combob_nereden, _ln_aktary, _combob_nereye, _ln_aktary, olan))

        yatirilan = _ln_aktar
        cekilen = "0"

        if _combob_nereye == "vakifhesap":
            olan = ui.lineEdit.text()
        else:
            olan = ""
        curs.execute(
            f'INSERT INTO {_combob_nereye} (tarih, yatirilan, nerden, cekilen, nereye, olmasigereken, olan) VALUES (?, ?, ?, ?, ?, ?, ?)',
            (_date_hesap, yatirilan, _combob_nereden, cekilen, _combob_nereye, yatirilan, olan))
        conn.commit()
        ui.combob_nereden.setCurrentIndex(-1)
        ui.combob_nereye.setCurrentIndex(-1)
        ui.ln_aktar.clear()
        ui.lineEdit.clear()
        ui.lineEdit.setVisible(False)
        ui.lb_if_vakif.setVisible(False)
        TABLOGOSTER(_combob_nereden)
        TABLOGOSTER1(_combob_nereye)
        break


def ilk():
    argu = ui.combob_nereden.currentText()
    argu += "hesap"
    if argu == "vakifhesap":
        ui.lb_if_vakif.setVisible(True)
        ui.lineEdit.setVisible(True)
    else:
        ui.lb_if_vakif.setVisible(False)
        ui.lineEdit.setVisible(False)
    ui.lb_nereden_tablo.setText(argu)
    TABLOGOSTER(argu)


def iki():
    argu = ui.combob_nereye.currentText()
    argu += "hesap"
    if argu == "vakifhesap":
        ui.lb_if_vakif.setVisible(True)
        ui.lineEdit.setVisible(True)
    else:
        ui.lb_if_vakif.setVisible(False)
        ui.lineEdit.setVisible(False)
    ui.lb_nereye_tablo.setText(argu)
    ui.lb_nereye_tablo_2.setText(argu)
    TABLOGOSTER1(argu)


# ______________________________İKİNCİ BOLUM__________________________#
# ____________________________________________________________________#
def ISLEMGOSTER(arguman):  #alım satım işlemlistesialım işlemlistesisatım
    coinlist = set()

    ui.lb_borsaadi.clear()
    ui.lb_genel1.clear()
    ui.lb_genel2.clear()

    ui.combo_coin.clear()
    ui.combo_coins.clear()
    ui.tblwd_alimsatim.clear()
    ui.tblwd_alimsatimozet.clear()

    #alım satım tablosunu seçilen borsanın işlemleri ile dorduruyoruzx

    ui.tblwd_alimsatim.setHorizontalHeaderLabels(
        ("ID", "TARİH", "COİN", "ALIŞ FİYAT", "MİKTAR", "TOPLAM ÖDENEN",
         "GÜNCEL FİYAT",
         "GÜNCEL EDER", "KARZARAR", "KASA"))
    ui.tblwd_alimsatim.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
    curs.execute(f"SELECT * FROM {arguman}")
    conn.commit()
    for satırindeks, satırveri in enumerate(curs):
        for sutunindeks, sutunveri in enumerate(satırveri):
            ui.tblwd_alimsatim.setItem(satırindeks, sutunindeks, QTableWidgetItem(str(sutunveri)))
            if sutunindeks == 2:
                coinlist.add(str(sutunveri))

    # seçilen borsadaki mevcut coin isimlerini comboboxa ekler
    ui.combo_coin.addItems(coinlist)
    ui.combo_coins.addItems(coinlist)
    """
    coinlistnew = set()
    coinlistnew.clear()
    for item in coinlist:
        coinlistnew.add(item)
    """
    ui.lb_borsaadi.setText(arguman.upper())  # secilen borsanın adını tablo başlığı olarak göstermek için

    ozetle(arguman,*coinlist)



def ALIM():
    while True:
        date = ui.date_alis.date().toString(QtCore.Qt.DateFormat.ISODate)
        borsa = ui.combob_borsa.currentText()
        coin = ui.combo_coin.currentText().upper()
        miktar = ui.ln_miktar.text()
        alisfiyat = ui.ln_alisfiyat.text()
        toplamodenen = ui.ln_toplamodenen.text()
        if coin == "" or miktar == "" or alisfiyat == "" or toplamodenen == "" or borsa == "":
            QMessageBox.question(penAna, "Lütfen Dikkkat!!!",
                                 "Alanları boş bırakamazsınız tarih seçmeyi unutmayın.", QMessageBox.Ok)
            break

        curs.execute(
            f"INSERT INTO {borsa} (tarih, coin, alisfiyat, miktar, toplamodenen, guncelfiyat, gunceleder, karzarar, kasa) VALUES (?,?,?,?,?,?,?,?,?)",
            (date, coin, alisfiyat, miktar, ("-" + toplamodenen), "guncelfiyat", "gunceleder", "karzarar",
             ("-" + toplamodenen)))
        conn.commit()
        ui.combo_coin.clear()
        ui.ln_miktar.clear()
        ui.ln_alisfiyat.clear()
        ui.ln_toplamodenen.clear()
        ISLEMGOSTER(borsa)
        break


def SATIM():
    while True:
        date = ui.date_satis.date().toString(QtCore.Qt.DateFormat.ISODate)
        borsa = ui.combob_borsa_2.currentText()
        coin = ui.combo_coins.currentText().upper()
        miktar = ui.ln_miktars.text()
        satisfiyat = ui.ln_satisfiyat.text()
        toplamodenen = ui.ln_toplamodenens.text()
        if coin == "" or miktar == "" or satisfiyat == "" or toplamodenen == "" or borsa == "":
            QMessageBox.question(penAna, "Lütfen Dikkkat!!!",
                                 "Alanları boş bırakamazsınız tarih seçmeyi unutmayın.", QMessageBox.Ok)
            break

        curs.execute(
            f"INSERT INTO {borsa} (tarih, coin, alisfiyat, miktar, toplamodenen, guncelfiyat, gunceleder, karzarar, kasa) VALUES (?,?,?,?,?,?,?,?,?)",
            (date, coin, satisfiyat, ("-" + miktar), toplamodenen, "guncelfiyat", "gunceleder", "karzarar",
             toplamodenen))
        conn.commit()
        ui.combo_coins.clear()
        ui.ln_miktars.clear()
        ui.ln_satisfiyat.clear()
        ui.ln_toplamodenens.clear()
        ISLEMGOSTER(borsa)
        break


def islemlistesialim(): #borsa adı seçildiğinde çağrılıyor
    argu = ui.combob_borsa.currentText()
    ISLEMGOSTER(argu)
    ui.combo_coin.setVisible(True)


def islemlistesisatim(): #borsa adı seçildiğinde çağrılıyor
    argu = ui.combob_borsa_2.currentText()
    ISLEMGOSTER(argu)
    ui.combo_coins.setVisible(True)


def goster(): #coin adı seçildiğinde çağrılıyor alım ekranında
    ui.ln_miktar.setVisible(True)
    ui.ln_alisfiyat.setVisible(True)
    ui.ln_toplamodenen.setVisible(True)
    ui.ln_birimmaliyet.setVisible(True)
    ui.btn_aliskaydet.setVisible(True)
    borsaadi = ui.combob_borsa.currentText()
    coinadi = ui.combo_coin.currentText()

    #ISLEMGOSTER(borsaadi)
    #filtrele(borsaadi, coinadi)


def goster2(): #coin adı seçildiğinde çağrılıyor satım ekranında
    ui.ln_miktars.setVisible(True)
    ui.ln_satisfiyat.setVisible(True)
    ui.ln_toplamodenens.setVisible(True)
    ui.ln_karzarars.setVisible(True)
    ui.btn_satiskaydet.setVisible(True)
    borsaadi = ui.combob_borsa_2.currentText()
    coinadi = ui.combo_coins.currentText()

    #ISLEMGOSTER(borsaadi)
    #filtrele(borsaadi, coinadi)


# ______________________________deneme amaçlı___________________________#
# ____________________________________________________________________#



def ozetle(borsaadi,*args): #işlemgösterde çağrılıyor
    tablolanacakliste = []

    #seçilen borsadaki coin işlemlerinden süzerek eldeki coinleri bir liste haline getiriyoruz
    for i in args:
        curs.execute(f'SELECT * FROM {borsaadi} WHERE coin="{i}"')
        conn.commit()
        #İLGİLİ BORSADAN COİN COİN SEÇİP SORGULUYORUZ ve maliyet güncel fiyat ederi ve karzara durumlarını hesaplıyoruz
        miktar = 0
        kasa = 0
        for satirindex, satirveri in enumerate(curs):
            for sutunindex, sutunveri in enumerate(satirveri):
                if sutunindex == 4:
                    miktar += float(sutunveri)
                if sutunindex == 9:
                    kasa += float(sutunveri)
        maliyet=0
        try:
            maliyet = abs(kasa / miktar)
            maliyet = round(maliyet, 5)
        except:
            pass

        toplamodenen= maliyet * miktar
        toplamodenen=round(toplamodenen,4)

        coinadded = i+"USDT"

        guncel = getprice(coinadded)
        gunceleder= float(guncel) * miktar
        gunceleder=round(gunceleder,4)
        karzarar= gunceleder - kasa
        karzarar=round(karzarar,4)
        yuzde=0.0
        try:
            yuzde= 100*karzarar/abs(kasa)
        except:
            pass
        yuzde=round(yuzde,2)
        liste=[ i, miktar, maliyet,toplamodenen,guncel,gunceleder, karzarar,yuzde, kasa]

        #elde bulunan coinlerin tüm güncel bilgilerini bir listeye ekliyoruz
        tablolanacakliste.append(liste)

    #ui.lb_borsaadi.clear()
    ui.lb_genel1.clear()
    ui.lb_genel2.clear()
    ui.tblwd_alimsatimozet.clear()

    #alım satım özet tablosuna tablonacaklarliste verisini yazdırıyoruz
    ui.tblwd_alimsatimozet.setHorizontalHeaderLabels(
        ("COİN", "ELDEKİ MİKTAR", "MALİYET", "TOPLAM ÖDENEN", "GÜNCEL FİYAT",
         "GÜNCEL EDER", "KARZARAR", "YUZDE", "KASA"))
    ui.tblwd_alimsatimozet.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
    gosterilecekkasa=0.0
    gosterilecekgunceleder=0.0

    for satirindeks, satir_veri in enumerate(tablolanacakliste):
        for sutunindeks, sutun_veri in enumerate(satir_veri):
            ui.tblwd_alimsatimozet.setItem(satirindeks, sutunindeks, QTableWidgetItem(str(sutun_veri)))
            if sutunindeks==8:
                gosterilecekkasa+= float(sutun_veri)
            if sutunindeks==5:
                gosterilecekgunceleder+= float(sutun_veri)
    gosterilecekkasa = round(abs(gosterilecekkasa),2)
    gosterilecekgunceleder= round(gosterilecekgunceleder,2)
    gosterilecekkarzarar= round(gosterilecekgunceleder-gosterilecekkasa,2)
    ui.lb_genel1.setText(str(gosterilecekkasa))
    ui.lb_genel2.setText(str(gosterilecekgunceleder))
    ui.label_17.setText(str(gosterilecekkarzarar))
    gosterilecekyuzde=0.0
    try:
        gosterilecekyuzde=(100*(gosterilecekgunceleder-abs(gosterilecekkasa)))/abs(gosterilecekkasa)
    except:
        pass
    gosterilecekyuzde = round(gosterilecekyuzde,2)
    ui.label_dolaryuzde.setText(str(gosterilecekyuzde))


# ______________________________GRAFİK OLUŞTURMA DENEMELERİ___________________________#
# ____________________________________________________________________________________#
def create_piechart(self):
    # Binance =250$ , Gateİo =700$, Huobi =300$, Bitfinex=180$, BtcTürk=600$

    series = QtChart.QPieSeries()
    series.append("Binance", 250)
    series.append("CGateİo", 700)
    series.append("Huobi", 300)
    series.append("Bitfinex", 180)
    series.append("BtcTürk", 600)
    series.setLabelsVisible(True)

    series.setLabelsPosition(QtChart.QPieSlice.LabelInsideHorizontal)
    for slice in series.slices():
        slice.setLabel("{:.2f}%".format(100 * slice.percentage()))

    chart = QChart()
    chart.addSeries(series)
    chart.createDefaultAxes()
    chart.setAnimationOptions(QChart.SeriesAnimations)
    chart.setTitle("Financial Percentage Budget")
    chart.legend().setVisible(True)
    chart.legend().setAlignment(Qt.AlignBottom)

    chart.legend().markers(series)[0].setLabel("Binance")
    chart.legend().markers(series)[1].setLabel("CGateİo")
    chart.legend().markers(series)[2].setLabel("Huobi")
    chart.legend().markers(series)[3].setLabel("Bitfinex")
    chart.legend().markers(series)[4].setLabel("BtcTürk")

    chartview = QChartView(chart)
    chartview.setRenderHint(QPainter.Antialiasing)

    ui.centralwidget(chartview)

# ______________________________SİNYAL SLOT___________________________#
# ____________________________________________________________________#
ui.btn_aktar.clicked.connect(AKTAR)


ui.combob_nereden.activated.connect(ilk)
ui.combob_nereye.activated.connect(iki)
ui.combob_borsa.activated.connect(islemlistesialim)
ui.combob_borsa_2.activated.connect(islemlistesisatim)
ui.combo_coin.activated.connect(goster)
ui.combo_coins.activated.connect(goster2)
ui.btn_aliskaydet.clicked.connect(ALIM)
ui.btn_satiskaydet.clicked.connect(SATIM)


sys.exit(Uygulama.exec_())

Aslında aradığım cevap şu :

1-resimde gösterdiğin yere ŞuWidget i koyman gerekiyor.
2- kod sayfazında grafik için gerekli hazırlıkları yaptıktan sonra
yani

def create_piechart(self):
    # Binance =250$ , Gateİo =700$, Huobi =300$, Bitfinex=180$, BtcTürk=600$

    series = QtChart.QPieSeries()
    series.append("Binance", 250)
    series.append("CGateİo", 700)
    series.append("Huobi", 300)
    series.append("Bitfinex", 180)
    series.append("BtcTürk", 600)
    series.setLabelsVisible(True)

    series.setLabelsPosition(QtChart.QPieSlice.LabelInsideHorizontal)
    for slice in series.slices():
        slice.setLabel("{:.2f}%".format(100 * slice.percentage()))

    chart = QChart()
    chart.addSeries(series)
    chart.createDefaultAxes()
    chart.setAnimationOptions(QChart.SeriesAnimations)
    chart.setTitle("Financial Percentage Budget")
    chart.legend().setVisible(True)
    chart.legend().setAlignment(Qt.AlignBottom)

    chart.legend().markers(series)[0].setLabel("Binance")
    chart.legend().markers(series)[1].setLabel("CGateİo")
    chart.legend().markers(series)[2].setLabel("Huobi")
    chart.legend().markers(series)[3].setLabel("Bitfinex")
    chart.legend().markers(series)[4].setLabel("BtcTürk")

    chartview = QChartView(chart)
    chartview.setRenderHint(QPainter.Antialiasing)

bu grafiğin eklemiş olduğun ŞuWidget içinde görünmesi için

ui.ŞuWidget.O_widgetinFalancaÖzelliği(chartview) 
#veya nasıl bir komut ile o işlem sağlanacak ise

diyerek grafiğin orada görünmesini sağlayabilirsin gibi bir cevap arıyorum.

not: bütün bunları yazarken baktımda derdimi anlatmak konusunda daha çok çalışmam gerek galiba

Bir layout oluşturup o layouta grafik widgetını atayıp yapabilirisiniz

        lay = QHBoxLayout()
        lay.addWidget(chartview)

        ui.ŞuWidget.setLayout(lay)

Tüm kod:

from PyQt5 import QtChart
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QHBoxLayout
import sys
from PyQt5.QtChart import QChart, QChartView
from PyQt5.QtGui import QPainter,QColor, QPalette
from PyQt5.QtCore import Qt


class Window(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("PyQtChart Pie Chart")
        self.setGeometry(100, 100, 800, 600)

        self.show()
        self.ekran()

    def create_piechart(self):
        # Binance =250$ , Gateİo =700$, Huobi =300$, Bitfinex=180$, BtcTürk=600$

        series = QtChart.QPieSeries()
        series.append("Binance", 250)
        series.append("CGateİo", 700)
        series.append("Huobi", 300)
        series.append("Bitfinex", 180)
        series.append("BtcTürk", 600)
        series.setLabelsVisible(True)

        series.setLabelsPosition(QtChart.QPieSlice.LabelInsideHorizontal)
        for slice in series.slices():
            slice.setLabel("{:.2f}%".format(100 * slice.percentage()))

        chart = QChart()
        chart.addSeries(series)
        chart.createDefaultAxes()
        chart.setAnimationOptions(QChart.SeriesAnimations)
        chart.setTitle("Financial Percentage Budget")
        chart.legend().setVisible(True)
        chart.legend().setAlignment(Qt.AlignBottom)

        chart.legend().markers(series)[0].setLabel("Binance")
        chart.legend().markers(series)[1].setLabel("CGateİo")
        chart.legend().markers(series)[2].setLabel("Huobi")
        chart.legend().markers(series)[3].setLabel("Bitfinex")
        chart.legend().markers(series)[4].setLabel("BtcTürk")

        chartview = QChartView(chart)
        chartview.setRenderHint(QPainter.Antialiasing)

        return chartview

    def ekran(self):

        widget1 = QWidget()
        widget1.setStyleSheet("background-color: rgb(255, 0, 0);")

        widget1.setFixedSize(500, 500)

        widget2 = QWidget()
        widget2.setStyleSheet("background-color: rgb(0, 0, 255);")
        widget2.setFixedSize(500, 500)

        chw = self.create_piechart()

        lay = QHBoxLayout()
        lay.addWidget(chw)

        widget2.setLayout(lay)

        lay = QHBoxLayout()
        lay.addWidget(widget1)
        lay.addWidget(widget2)

        cwidget = QWidget()
        cwidget.setLayout(lay)
        self.setCentralWidget(cwidget)


if __name__ == '__main__':
    App = QApplication(sys.argv)
    window = Window()
    sys.exit(App.exec_())
1 Beğeni

Çok teşekkür ediyorum. Aradığım tam da buydu `

tekrar teşekkür ediyorum. Son bir sorum daha olacak çok olmazsam. Bu grafiği excell in grafikleri gibi daha güzel görünür bir hale getirebiliyormuyuz 3D gibi.

Benim kodum sizin 2.sorunuza cevap veriyor ilk sorduğunuz sorunun cevabını yani gönderinin asıl amacının çözümünü semtex atmış benim kodun büyük çoğunluğu da zaten onun kodundan alıntı. Aynı soruyu soran başka insanlarında cevaba ulaşması için bence çözüm semtexin gönderisinde olmalıydı benim kodda da cevap bulunuyor bulunmasına da kod aslen semtexin .

3D ye gelirsem yapabildim ama hem exceldekinin aynısı olmadı hem de benimkinden çok çok daha kolay bir yol vardır yanlış bir yol göstermeyim diye paylaşmıyorum yani ben baya dolandırdım bir kütüphaneden grafiği elde ediyorum grafiği sonra başka bir kütüphane ile kırpıyor en son olarak bu grafiğin resmini bir widgetta adama sunuyor eminim başka bir kütüphane ile daha kolay yolu vardır.

1 Beğeni

Tabiki Semtex in katkılarıda çok değerli ve kodun büyük kısmını oluşturuyor. Benim takıldığım nokta olarakda sizin kodunuzda çok değerli bir katkı sundu. Burada yardımda bulunan herkese çok teşekkür ediyorum. Hem Semtex e hem size