PyQt5 widget içine matplotlib yerleştirme

Herkese merhaba. Bir konuda desteğinize ihtiyacım var. PyQt5 ile uygulama hazırlıyorum. Uygulamanın belirli bir kısmına widgetler yerleştirdim. Bu widgetlerin içerisine matplotlib ile grafik yerleştirmek istiyorum. İnternetten araştırdım fakat tam anlayamadım. Paylaştığım kodlar haricinde farklı denemelerimde oldu ama başaramadım. Hep ayrı bir pencere şeklinde açılıyor.

Kodlar ve ekran görüntüsünü paylaşıyorum. Desteğiniz için şimdiden teşekkürler.

widget ismi grafikceyreksatis.

def grafik(self):
            
      Hissesecimi=self.ui.HisseSec.currentText()
      veri="C:/Users/isaak/Desktop/TemelAnalizProgrami/bilancohesaplama/" + Hissesecimi + ".xlsx"
      kitap=load_workbook(veri)
      sayfa=kitap["Mali Tablo"]

      if sayfa["B1"].value == "2021/12" :
         # 1. çeyrek dönem karı zararı 2021/12 ise
         ceyrekkar1=sayfa["B109"].value-sayfa["C109"].value
         ceyrekkar2=sayfa["C109"].value-sayfa["D109"].value
         ceyrekkar3=sayfa["D109"].value-sayfa["E109"].value
         ceyrekkar4=sayfa["E109"].value

         fig=plt.figure()
         

         grafik=fig.add_axes([0.1,0.1,0.8,0.6])
         donemler=["2021/12","2021/9","2021/6","2021/3"]
         donemkarzarar=[ceyrekkar1,ceyrekkar2,ceyrekkar3,ceyrekkar4]
         grafik.bar(donemler,donemkarzarar,label="Dönem Karı Zararı", color="Red")
         grafik.set_xlabel("Dönemler")
         grafik.legend()
         
         plt.show()

      elif sayfa["B1"].value == "2022/3" :
         # 1. çeyrek dönem karı zararı 2022/3 ise
         ceyrekkar1=sayfa["B109"].value
         ceyrekkar2=sayfa["C109"].value-sayfa["D109"].value
         ceyrekkar3=sayfa["D109"].value-sayfa["E109"].value
         ceyrekkar4=sayfa["E109"].value-sayfa["F109"].value

         fig=plt.figure()
         
         grafik=fig.add_axes([0.1,0.1,0.8,0.6])
         donemler=["2022/3","2021/12","2021/9","2021/6"]
         donemkarzarar=[ceyrekkar1,ceyrekkar2,ceyrekkar3,ceyrekkar4]
         grafik.bar(donemler,donemkarzarar,label="Dönem Karı Zararı", color="Red")
         grafik.set_xlabel("Dönemler")
         grafik.legend()
         grafik.add_widget=self.ui.grafikceyreksatis
         plt.show()


pyqtgraph kullanmayı denediniz mi?
https://www.pyqtgraph.org

2 Beğeni

Denemedim hocam matplotlib grafikleri biraz daha şık duruyor diye onu kullanmak istemiştim açıkçası.

Merhaba tekrardan belirlediğim widget kısmına grafik kutusunu yerleştirdim. Fakat yine grafiği içeri aktaramadım. dışarıda çıkıyor maalesef.

class uygulama(qtw.QMainWindow,QWidget):
    def __init__(self):
        super().__init__()
        self.ui=Ui_MainWindow()
        self.ui.setupUi(self)
        
        #grafik yerleşimi ile ilgili kodlar
        self.canvas=FigureCanvas(Figure())
        self.layout=QVBoxLayout(self.ui.grafikceyreksatis)
        self.setLayout(self.layout)
        self.layout.setContentsMargins(0,0,0,0)
        self.layout.addWidget(self.canvas)
        self.figure = plt.figure()
        self.ui.Vgetir.clicked.connect(self.grafik)

buda grafiği yerleştirmeye çalıştığım yer.

def grafik(self):
            
      Hissesecimi=self.ui.HisseSec.currentText()
      veri="C:/Users/isaak/Desktop/TemelAnalizProgrami/bilancohesaplama/" + Hissesecimi + ".xlsx"
      kitap=load_workbook(veri)
      sayfa=kitap["Mali Tablo"]

      

      if sayfa["B1"].value == "2022/3" :
         # 1. çeyrek dönem karı zararı 2022/3 ise
         ceyrekkar1=sayfa["B109"].value
         ceyrekkar2=sayfa["C109"].value-sayfa["D109"].value
         ceyrekkar3=sayfa["D109"].value-sayfa["E109"].value
         ceyrekkar4=sayfa["E109"].value-sayfa["F109"].value
         donemler=["2021/12","2021/9","2021/6","2021/3"]
         donemkarzarar=[ceyrekkar1,ceyrekkar2,ceyrekkar3,ceyrekkar4]

          
         # fig=plt.figure()
         self.figure.clear()
         
         grafik=self.figure.add_axes([0.1,0.1,0.8,0.6])
         grafik.bar(donemler,donemkarzarar,label="Dönem Karı Zararı", color="Red")
         grafik.set_xlabel("Dönemler")
         grafik.legend()
         # ax = grafik.add_subplot(111)
         # ax.plot(grafik)

        
         self.canvas = FigureCanvas(self.figure)
         self.canvas.draw()
         # self.canvas.show()

ilişkilendirmeyi nasıl yapacağımı çözemiyorum bir türlü. Belki de çok basit bir şekilde olacaktır ama kafa durdu …

Sorunu çözdüm ilginiz için teşekkürler…

1 Beğeni

Merhaba. Sorunu nasıl çözüdünüz? Yazarsanız çok sevinirim.

Merhaba sorunu şöyle çözdüm . İlk önce tasarladığım widgetin içine matloplib tuvalinin gözükmesi için resim deki gibi def__init__ üzerinden tanımlama yaptım. Ardından yeni bir fonksiyonda işlemleri yaptım. sonra bu işlemleri tuvale aktardım.

image

Takıldığınız yer olursa yine yardımcı olurum sağlıcakla…

1 Beğeni