Takvimde Plan oluşturma

Merhaba arkadaşlar Pyqt5 ile bir takvim uygulaması üzerinde çalışıyorum amacım bu takvim üzerinde belli günler üzeriine randevu atamak
şimdiden teşekkürler

1 Beğeni

Pekala, başarılar dileriz :slight_smile:

Aalında yardım istemiştim yazmayı unutmuşum :smile:
Takvimin görsel olarak günleri üzerine erişip bir randevu atadığımı üzerinde belirtemiyorum
Findchild metodu ve paintcell metodu ile bir kaç yerde yapılmış ama ben pek anlamadım nasıl yapıldığını

Biraz daha açıklayıcı anlatır mısınız? Herhangi bir güne randevu veriyorsunuz, bunun da belirgin olmasını istiyorsunuz. Doğru mu?

Evet takvim görselinin üzerinde herhangi bi gün üzerinde görev/randevu atamak istiyorum örneğin resmi/dini bayramların belirtilmesi

Akşam yardımcı olmaya çalışırım. Umarım daha erken çözüme ulaşırsınız.

Merhaba;

findchild değil ama paintCell aradığımız şey.

Muhtemelen paintCell’in ne yaptığını anlamadınız. Öncelikle bir kutucuğa nasıl yazı yazdırabileceğinize bakalım:

import sys
from PyQt5.QtCore    import *
from PyQt5.QtGui     import *
from PyQt5.QtWidgets import *

class CalendarWidget(QCalendarWidget):
    def __init__(self):
        super().__init__()
        self.resize(600,400)

    def paintCell(self, painter, rect, date):
        self.setGridVisible(True) # Takvimdeki kutucuk kenarlarının (grid) görünmesini sağlıyoruz.
        if date == QDate(2020, 1, 1): # Takvimde bu tarih seçilirse
            painter.setPen(QColor(168, 34, 3)) # Kalem rengini değiştiriyoruz, varsayılan renk siyah.
            painter.setFont(QFont('Arial', 10)) # Font özellikleri
            # QPainter ile dikdörtgenin ortasına (AlignCenter) yazı yazdırıyoruz (Ozel Gun)
            painter.drawText(rect, Qt.AlignCenter, 'Ozel\nGun')
        else:
            # Tarih 2020/1/1 olmadığı sürece değişiklik olmayacak.
            # Varsayılan değerler uygulanacak.
            QCalendarWidget.paintCell(self, painter, rect, date)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = CalendarWidget()
    w.show()
    sys.exit(app.exec_())

Açıklanması gereken yerleri açıkladım. Gelelim paintCell’e. Qt, Event-Driven programming (olay güdümlü programlama) yöntemini çok kullanır. Bu yöntem kullanıcı ile girilen etkileşimden sinyaller alıp duruma göre işler yapar. Ancak olaylar hep kullanıcı tarafından tetiklenmez. Bazı olaylar program içerisinde de tetiklenebilir. paintCell de bir olay fonksiyonu ve görevi sadece hücreyi boyamak/çizmek. paintCell, şu parametreleri alır (painter, rect, date). Bu parametreler ise şu sınıfları temsil ederler:

  • painter = QPainter
  • rect = QRect
  • date = QDate

Bu ne demek oluyor? Bunun anlamı, bu sınıflar ile normalde neler yapabiliyorsanız, paintCell altında da yapabilirsiniz demek. Mesela QPainter ile çizim yapabiliyorsunuz, dolayısıyla QPainter ile hücreye yazı yazdırdık.

Az ve öz anlattım. Detaya inmiyorum çünkü konu başlığına uygun olmasını istiyorum. Yakında bir konu açıp, altında detaylı anlatmayı düşünüyorum.

bende paintCell fonksiyonu tetiklenmiyor

Kodları görmem gerek.

from datetime import datetime
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QPainter
from PyQt5.QtCore import Qt, QSize, QTimer, QDate, QRect
from takvim import Ui_takvim_pencere


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

    self.tk = Ui_takvim_pencere()
    self.tk.setupUi(self)

    self.tk.takvim_widget.clicked.connect(self.bilgi_al)

    # self.tk.takvim_widget.setGridVisible(True)

    self.events = {
        QDate(2020, 9, 1): ["deneme"],
        QDate(2019, 5, 19): ["Alice's birthday"]
    }


def paintCell(self, painter, rect, date):
    # Takvimdeki kutucuk kenarlarının (grid) görünmesini sağlıyoruz.
    self.tk.takvim_widget.setGridVisible(True)
    if date == QDate(2020, 9, 1):  # Takvimde bu tarih seçilirse
        # Kalem rengini değiştiriyoruz, varsayılan renk siyah.
        painter.setPen(QColor(168, 34, 3))
        painter.setFont(QFont('Arial', 10))  # Font özellikleri
        # QPainter ile dikdörtgenin ortasına (AlignCenter) yazı yazdırıyoruz (Ozel Gun)
        painter.drawText(rect, Qt.AlignCenter, 'Ozel\nGun')
    else:
        # Tarih 2020/1/1 olmadığı sürece değişiklik olmayacak.
        # Varsayılan değerler uygulanacak.
        QCalenderWidget.paintCell(self, painter, rect, date)



def bilgi_al(self, qDate):
    global bilgiler
    print(qDate.day())
    # self.close()


app = QApplication([])
win = takvim()
win.show()
app.exec()

çok teşekkür ederim yardımlarınız için çözdüm

1 Beğeni