PyQt5 Dersleri – QMainWindow ( Menülerle Çalışmak )

Bu etkinliğimizde bir menü çubuklarını nasıl ekleyeceğimizi, menülere alt menü eklemeyi, menüleri Türkçe ya da İngilizce yapmayı, her komutun nasıl tetikleneceğini ve tetiklendiğinde fonksiyon çalıştırmayı , birden fazla sınıf ile çalışmayı ( her sınıf ayrı bir form olarak tasarlamayı) kullandık.

Etkinliğimizi incelemek ve indirmek için İndir !

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

import sys

class Pencere(QMainWindow):
    def __init__(self):
        super(Pencere, self).__init__()
        self.pencereAyar()
        self.aracKutulariAyar()
        self.menuAyar()

    def dilAl(self):
        diller = ("Ingilizce","Turkce")
        secim,tamam = QInputDialog.getItem(self,"Dil Seçim","Lütfen bir dil belirleyiniz",diller,0,False)
        if tamam:
            return secim
        else:
            return secim

    def pencereAyar(self):
        self.setWindowIcon(QIcon("../Desktop/logo.png"))
        self.setWindowTitle("Kullanıcı Giriş ve Bilgi Ekranı")
        self.setGeometry(1000,400,500,200)
        self.show()

    def menuAyar(self):
        self.dil = self.dilAl()

        # menuBar() nesnesinden bar oluşturalım.
        bar = self.menuBar()

        # Ana menüleri ayarlayalım.
        dosya = bar.addMenu(self.dilAyarla(self.dil)[0])
        duzen = bar.addMenu(self.dilAyarla(self.dil)[1])
        yardim = bar.addMenu(self.dilAyarla(self.dil)[2])

        # QAction larımızı ayarlayalım
        bilgiAl = QAction("Bilgi Al", self)
        bilgiAl.setShortcut("ctrl+b")
        bilgiAl.setIcon(QIcon("../Desktop/logo.png"))

        girisYap = QAction("Giriş Yap", self)
        girisYap.setShortcut("ctrl+g")
        girisYap.setIcon(QIcon("../Desktop/logo.png"))

        yardimAl = QAction("Yardım Al", self)
        yardimAl.setShortcut("ctrl+y")
        yardimAl.setIcon(QIcon("../Desktop/logo.png"))

        # QActionları menulere addAction yapalım
        dosya.addAction(bilgiAl)
        dosya.addAction(girisYap)
        yardim.addAction(yardimAl)

        # ayarlar alt menüsünü ayarlayalım.
        ayarlar = dosya.addMenu("Ayarlar")

        pdfAyar = QAction("pdf Ayarla", self)
        pdfAyar.setShortcut("ctrl+p")
        pdfAyar.setIcon(QIcon("../Desktop/logo.png"))
        wordAyar = QAction("docx Ayarla", self)
        wordAyar.setShortcut("ctrl+w")
        wordAyar.setIcon(QIcon("../Desktop/logo.png"))
        ayarlar.addAction(pdfAyar)
        ayarlar.addAction(wordAyar)

        # Alt menulerdeki komutların tetiklenmesi
        dosya.triggered[QAction].connect(self.menuSecimAl)
        yardim.triggered[QAction].connect(self.menuSecimAl)

    def aracKutulariAyar(self):
        aracKutusu1 = self.addToolBar("Araç Kutusu")
        aracKutusu2 = self.addToolBar("Bilgi Kutusu")

        # Araç Kutusu 1 in içindekiler
        ac = QAction(self)
        ac.setIcon(QIcon("../PyQt5_Dersleri/icons/ac.png"))
        ac.setText("Aç")
        aracKutusu1.addAction(ac)

        yeni = QAction(self)
        yeni.setText("Yeni")
        yeni.setIcon(QIcon("../PyQt5_Dersleri/icons/yeni.png"))
        aracKutusu1.addAction(yeni)

        yazdir = QAction(self)
        yazdir.setText("Yazdır")
        yazdir.setIcon(QIcon("../PyQt5_Dersleri/icons/yazdir.png"))
        aracKutusu1.addAction(yazdir)

        aracKutusu1.actionTriggered.connect(self.aracKutuSecimAl)

        # Araç Kutusu 2 nin içindekiler.
        bilgi = QAction(self)
        bilgi.setText("Bilgi Al")
        bilgi.setIcon(QIcon("../PyQt5_Dersleri/icons/bilgi.png"))
        aracKutusu2.addAction(bilgi)

        kapat = QAction(self)
        kapat.setText("Kapat")
        kapat.setIcon(QIcon("../PyQt5_Dersleri/icons/kapat.png"))
        aracKutusu2.addAction(kapat)

        aracKutusu2.actionTriggered.connect(self.aracKutuSecimAl)

        # Araç Kutusuna addWidget yapabiliriz.
        araKutu = QLineEdit()
        aracKutusu1.addWidget(araKutu)
        araButton = QPushButton("Ara")
        aracKutusu1.addWidget(araButton)

    def menuSecimAl(self,secim):
        print(secim.text())
        if secim.text() == "Yardım Al":
            self.alan = yardimAlan()
        elif secim.text() == "Giriş Yap":
            self.alan = girisAlan()
        elif secim.text() == "Bilgi Al":
            self.alan = bilgiAlan()
        else:
            print("Olmadı")

        self.setCentralWidget(self.alan)

    def aracKutuSecimAl(self,q):
        print(q.text())

    def dilAyarla(self,dil):
        yapi = {
            "Ingilizce":["File","Edit","Help"],
            "Turkce":["Dosya","Düzen","Yardım"]
        }
        return yapi[dil]

class bilgiAlan(QWidget):
    def __init__(self):
        super(bilgiAlan, self).__init__()
        self.bilgiAlAyar()

    def bilgiAlAyar(self):
        bilgiAlForm = QFormLayout()
        bilgiAlForm.addRow("Adınız :",QLineEdit())
        bilgiAlForm.addRow("Soyadınız : ",QLineEdit())

        h_Box = QHBoxLayout()
        h_Box.addWidget(QRadioButton("Erkek"))
        h_Box.addWidget(QRadioButton("Kız"))
        bilgiAlForm.addRow("Cinsiyet",h_Box)
        bilgiAlForm.addRow(QPushButton("Gönder"))

        self.setLayout(bilgiAlForm)

class girisAlan(QWidget):
    def __init__(self):
        super(girisAlan, self).__init__()
        self.girisYapAyar()

    def girisYapAyar(self):
        girisYapForm = QFormLayout()
        girisYapForm.addRow("Kullanıcı Adı : ",QLineEdit())
        girisYapForm.addRow("Şifre :",QLineEdit())
        girisYapForm.addRow(QPushButton("Giriş Yap"))

        self.setLayout(girisYapForm)

class yardimAlan(QWidget):
    def __init__(self):
        super(yardimAlan, self).__init__()
        self.yardimAlanAyar()

    def yardimAlanAyar(self):
        yardimAlanForm = QFormLayout()

        yardimAlanForm.addRow("<a href=\"www.sendekodla.com\">Yardım almak için lütfen ziyaret ediniz</a>",QLabel())
        self.setLayout(yardimAlanForm)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    pencere = Pencere()
    sys.exit(app.exec())