Pyqt5 Buton Kodum Çalışmıyor

Denedim denedim bir türlü olmadı. Bilen varsa lütfen yardımcı olsun. Butonumu denemek istemiştim, basit bir kod yazdım. Ama çalışmıyor.

from tkinter import *
import sys
import pygame
from PyQt5 import uic
from PyQt5.QtWidgets import*
from PyQt5.QtGui import*
pygame.init()
class Pencere(QMainWindow):
def init(self):
super().init() # miras alınan sınıfın (QMainWindow) init fonksiyonunu çağırma
uic.loadUi(‘Pyqt5.ui’, self) # ui dosyasını yükleme
self.setWindowIcon(QIcon(“Logo.png”))
def setUI(self):
self.kurabiye=QPushButton(self)
self.kurabiye.clicked.connect(self.kurabiye)
self.show()
def kurabiye(self):
print(“Tıklandı!”)
pencere = Tk()
pencere.title(“Giriş Ekranı”)
pencere.geometry(“300x300”)
pencere.resizable(False,False)
pencere.configure(background=“#ffdead”)
def sign_in():
sifre=entry.get()
if sifre==“a”:
pencere.destroy()
app = QApplication(sys.argv)
pencere2 = Pencere()
pencere2.resize(500, 500)
pencere2.setWindowTitle(‘Tarık Bülbül’)
pencere2.showMaximized()

    sys.exit(app.exec_())
else:
    entry.destroy()
    buton.destroy()
    label.destroy()
    yanlis=Label(pencere)
    yanlis.config(text="Şifre Yanlış",font=("Times New Roman",40), bg="#b22222")
    yanlis.place(x=20,y=40)

label=Label(pencere)
label.config(text=“Şifreyi Gir”,font=(“Times New Roman”,40), bg=“#ffe4c4”, fg=“Yellow”)
label.place(x=20,y=40)

entry=Entry(pencere, show= “*”)
entry.place(x=20,y=120)

buton=Button(pencere)
buton.config(text=“Giriş yap”,bg=“#ffdab9”,fg=“white”,command=sign_in)
buton.place(x=20,y=150)
mainloop()

Sorunlu kısım:

class Pencere(QMainWindow):
def init(self):
super().init() # miras alınan sınıfın (QMainWindow) init fonksiyonunu çağırma
uic.loadUi(‘Pyqt5.ui’, self) # ui dosyasını yükleme
self.setWindowIcon(QIcon(“Logo.png”))
def setUI(self):
self.kurabiye=QPushButton(self)
self.kurabiye.clicked.connect(self.kurabiye)
self.show()
def kurabiye(self):
print(“Tıklandı!”)

Error da vermiyor, hatasız görünüyor.
Buton kodlarım eksik değil. Gerisini QT Designer programında hallettim. Hatam nerede?

Fonksiyon adı da kurabiye, QPushButton classinin adı da kurabiye.

Fonksiyon adını kurabiye yerine kurabiye_func şeklinde falan değiştir.

Denedim ama işe yaramadı. :slightly_frowning_face:. Yine de teşekkürler.

Merhaba, kodunuzu bu haliyle hiç calistiramiyorum. En azından girinti olmadan kodda nasıl bir şablon var bilemiyorum.

Kodunuzu ya

postunda anlatıldığı gibi düzenleyin

ya da duzenleyemediyseniz(ki insanlık hali olabilir)
paste.ubuntu.com a atın bakayım bi.

ui dosyası şimdilik lazım değil, bana yazdığınız kodun girintileri düzeltilmiş şekli yeterli. (Yetmezse ui dosyasını falan da rica edecem.)

1 Beğeni

İlgilendiğiniz için teşekkür ederim. Evet onu denedim ama olmadı. Link: Ubuntu Pastebin

Bir de resimler sizde olmadığı için ikon kısmında başına # eklemeyi unutmayın.

Merhaba, sorununu çözdüm,

sen __init__ içinde self.setUI methodunu çalıştırmamışsın, o da butona fonksiyon atamamış, bu yüzden butonuna fonksiyonun atandığını zannetmişsin ama butona fonksiyon atanmamış.
Yani şu parça

def __init__(self):
        super().__init__()  # miras alınan sınıfın (QMainWindow) __init__ fonksiyonunu çağırma
        uic.loadUi('deneme.ui', self)  # ui dosyasını yükleme
        self.setWindowIcon(QIcon("Logo.png"))

Kodunun düzeltilmiş hali burada:

from tkinter import *
import sys
#import pygame
from PyQt5 import uic
from PyQt5.QtWidgets import*
from PyQt5.QtGui import*
#pygame.init()
class Pencere(QMainWindow):
    def __init__(self):
        super().__init__()  # miras alınan sınıfın (QMainWindow) __init__ fonksiyonunu çağırma
        uic.loadUi('deneme.ui', self)  # ui dosyasını yükleme
        #self.setWindowIcon(QIcon("Logo.png"))
        self.setUI()
    
    def setUI(self):
        self.kurabiye.clicked.connect(self.kurabiye_func)
        self.show()

    def kurabiye_func(self):
        print("Tıklandı!")
        
pencere = Tk()
pencere.title("Giriş Ekranı")
pencere.geometry("300x300")
pencere.resizable(False,False)
pencere.configure(background="#ffdead")
def sign_in():
    sifre=entry.get()
    if sifre=="a":
        pencere.destroy()
        app = QApplication(sys.argv)
        pencere2 = Pencere()
        pencere2.resize(500, 500)
        pencere2.setWindowTitle('Tarık Bülbül')
       # pencere2.showMaximized()

        sys.exit(app.exec_())
    else:
        entry.destroy()
        buton.destroy()
        label.destroy()
        yanlis=Label(pencere)
        yanlis.config(text="Şifre Yanlış",font=("Times New Roman",40), bg="#b22222")
        yanlis.place(x=20,y=40)
label=Label(pencere)
label.config(text="Şifreyi Gir",font=("Times New Roman",40), bg="#ffe4c4", fg="Yellow")
label.place(x=20,y=40)

entry=Entry(pencere, show= "*")
entry.place(x=20,y=120)

buton=Button(pencere)
buton.config(text="Giriş yap",bg="#ffdab9",fg="white",command=sign_in)
buton.place(x=20,y=150)
mainloop()

Bu arada bakmak istersen sana birkaç tavsiye vermek istiyorum:

  • değişken isimlendirmelerine dikkat et. Örneğin hem methodun adı kurabiye hem de QPushButton un adı kurabiye olursa şöyle bir hata alabilirsin:
Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python3.9/tkinter/__init__.py", line 1892, in __call__
    return self.func(*args)
  File "/home/cihat/Desktop/bulbul.py", line 32, in sign_in
    pencere2 = Pencere()
  File "/home/cihat/Desktop/bulbul.py", line 13, in __init__
    self.setUI()
  File "/home/cihat/Desktop/bulbul.py", line 16, in setUI
    self.kurabiye.clicked.connect(self.kurabiye)
TypeError: argument 1 has unexpected type 'QPushButton'
  • Tercihine kalmış ama ui dosyalarını pyuic ile direkt py dosyalarına dönüştürebilirsin. Şahsen kullanıyorum, sana da tavsiye ederim.

Hayırlı günler

1 Beğeni

Çok teşekkür ederim. Dediğinizi yapacağım.

1 Beğeni

Rica ederim kolay gelsin