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
Pekala, başarılar dileriz
Aalında yardım istemiştim yazmayı unutmuşum
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