PyQt5'le OTEL YÖNETİM SİSTEMİ yapmaya karar verdim. Birkaç sıkıntı yaşıyorum

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



class Otel_Yönetim_Sistemi(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setUI1()

    def setUI1(self):

        self.setCentralWidget(AnaPencere())
        self.menubar1 = QMenuBar(self)
        self.setMenuBar(self.menubar1)

        self.odalar = QMenu(self.menubar1)
        self.odalar.setTitle("Odalar")
        self.menubar1.addMenu(self.odalar)

        self.iki_kişilik = QAction(self)
        self.iki_kişilik.setText("İki Kişilik Odalar")
        self.odalar.addAction(self.iki_kişilik)

        self.üç_kişilik = QAction(self)
        self.üç_kişilik.setText("Üç Kişilik Odalar")
        self.odalar.addAction(self.üç_kişilik)

        self.iki_kişilik.triggered.connect(self.ikiFonk)
        self.üç_kişilik.triggered.connect(self.ucFonk)

    def ikiFonk(self):
        self.setCentralWidget(iki_kişilik_odalar())

    def ucFonk(self):
        self.setCentralWidget(üç_kişilik_odalar())


class AnaPencere(QWidget):
    def __init__(self):
        super().__init__()
        self.setUI2()

    def setUI2(self):
        karşılama_yazısı = QLabel(self)
        karşılama_yazısı.setText("Otel Yönetim Sistemi")
        karşılama_yazısı.setAlignment(Qt.AlignCenter)
        karşılama_yazısı.setFont(QFont("Helvetica", 18, QFont.Bold))

class iki_kişilik_odalar(QWidget):
    def __init__(self):
        super().__init__()
        self.setUI3()


    def setUI3(self):
        vLayout1 = QVBoxLayout(self)
        vLayout2 = QVBoxLayout(self)
        hLayout1 = QHBoxLayout(self)

        for self.oda2_no in range(1,51): # 50 oda olacak.
            self.oda2_buton = QPushButton(self)
            self.oda2_buton.setText(str(self.oda2_no))
            vLayout1.addWidget(self.oda2_buton)
            if self.oda2_no >= 26:
                vLayout2.addWidget(self.oda2_buton)

        hLayout1.addLayout(vLayout1)
        hLayout1.addLayout(vLayout2)


class üç_kişilik_odalar(QWidget):
    def __init__(self):
        super().__init__()
        self.setUI4()

    def setUI4(self):
        pass



app = QApplication(sys.argv)
window = Otel_Yönetim_Sistemi()
window.show()
app.exec()

Sorum şu:
class iki_kişilik_odalar(self): da oda butonları düzgün dizilmiyor nerde hata yapıyorum?

class tarzı kullanımlarda Türkçe karakterleri değil de daha çok ingilizce karakterleri seçmenizi öneriririm. aksi halde fonksiyonu çağırma konusunda da hatalar yaşarsınız.

Python3’de böyle bir problem yok diye biliyorum, bir örnek verebilir misiniz?

Kodlar Cython ile C kodlarına dönüştürülecekse Türkçe karakterler hata verir. Bunun haricinde dediğiniz gibi isimler Türkçe karakter içerebilir.

1 Beğeni

Aynen haklısınız bundan sonra türkçe karakterler kullanmamaya çalışacağım. Düzelttim de. Peki butonlar neden düzenli bir şekilde dizilmiyor.

modül55 kodları




from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(512, 422)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(160, 90, 181, 131))
        self.pushButton.setObjectName("pushButton")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 512, 22))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "TIKLAYINIZ"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

from PyQt5.QtWidgets import *
from modül55 import *
class deneme(QMainWindow):
    def statüsbar_message(self):
        self.ui.statusbar.showMessage("Merhaba Dünya")
    def __init__(self):
        super().__init__()
        self.ui=Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.pushButton.clicked.connect(self.statüsbar_message)
uygulama=QApplication([])
pencere=deneme()
pencere.show()
uygulama.exec()

buradaki “def statüsbar_message” yazısını " def statusbar_message" şeklinde değiştirirseniz kodlar çalışacaktır.

Ancak bunun dil ile alakası yok, kütüphanenin çalışma şeklinden kaynaklı. Verilen hatanın sebebi de bunun gibi bir şey diye tahmin ediyorum:

>>> def statüsbar_message():
	pass

>>> def connect(f):
	f.__name__.encode("ascii")

	
>>> connect(statüsbar_message)
Traceback (most recent call last):
  File "<pyshell#8>", line 1, in <module>
    connect(statüsbar_message)
  File "<pyshell#7>", line 2, in connect
    f.__name__.encode("ascii")
UnicodeEncodeError: 'ascii' codec can't encode character '\xfc' in position 4: ordinal not in range(128)

Yunus Bey hatayı dilden değil kütüphaneden kaynaklı almış zaten. Sorunun dille alakalı olduğunu söylemedim ki.

Ben buradan genel bir ifade anlamıştım, kütüphaneyi kastediyorsanız bir şey diyemem.

(: Kesinlikle haklısınız Ekrem Bey. Hatam için sizden çok özür diliyorum ve lütfen mazur görün. En yakın Dil Anlatım kursuna gitmem daha hayırlı olacak sanırım. Genel ifadeler kullanmayı bırakıp çok daha ayrıntılı bir üslup kullanmam gerekiyor. İyi akşamlar sizlere.

Ben sizin uslübunuza bir şey demedim, sadece ne anladığımı söyledim. Benim okuma-anlamamda da problem olabilir. Size de iyi akşamlar.

Oncelikle:

Kod calismadi, from PyQt5.QtWidgets import * eklemek gerekti.

Kutuphane uc adet warning veriyor. Bunlar dikkate alindi ve sorun cikartmadiklarindan emin olundu mu?

Sonra:

Duzgun dizilmekten kasit nedir? Nasil dizilmeleri bekleniyor, nasil diziliyorlar?

1 Beğeni

Buna benzer bi düzende.

(Diger sorumun cevabini bekliyorum, zira sorun o gibi.)

Eğer hatadan üç hatadan bahsediyorsan ben hata almıyorum

Ben sadece şunu öğrenmek istiyorum. Butonları gönderdiğim formatta nasıl dizebilirim?

Uc adet uyari mesajindan bahsediyorum:

QLayout: Attempting to add QLayout "" to iki_kişilik_odalar "", which already has a layout
QLayout: Attempting to add QLayout "" to iki_kişilik_odalar "", which already has a layout
QLayout::addChildLayout: layout "" already has a parent

QVBoxLayout constructor’larina parent parametresi olarak self yollayinca cikiyor. (Parent’larinin hLayout1 olmasi lazim, iki_kişilik_odalar degil.)

Duzeltince de butonlar iki dikey sira halinde diziliyorlar; bir yatay layout’a iki adet dikey layout koymanin dogal sonucu bu gibi.

Resimdeki dizilim icin tek bir QGridLayout kullanilmasi gerekiyor gibi duruyor.