Çözüldü Python PyQt5'de butona basılmamasına rağmen butondaki fonksiyon çalışıyor

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

deezwend

Hectopat
Katılım
28 Haziran 2021
Mesajlar
294
Çözümler
4
Daha fazla  
Cinsiyet
Erkek
Python:
import sys
from tkinter.messagebox import *
from PyQt5.QtWidgets import *
from arayuz import *
from selenium import webdriver
from selenium.webdriver.common.by import By as by
from selenium.webdriver.common.keys import Keys as key
import time
import sqlite3

class entryCekici(QMainWindow):
    def __init__(self):
        super().__init__()
        self.ui = Ui_eksi_sozluk_entry()
        self.ui.setupUi(self)
        self.link = self.ui.lineEdit.text() # Linkin bulunduğu textbox
        self.ui.gonder.clicked.connect(entryCekici.basliga_gir(self)) # Linki yollama butonu

    def basliga_gir(self):
        self.browser = webdriver.Chrome()
        self.browser.get(self.link)


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

@egoistpizza Hocam yardımcı olabilirseniz çok sevinirim.

Merhabalar, başlıkta yazdığım gibi ben linki gönderen butona basmamama rağmen kendi kendine komutun içerisine yazdığım fonksiyona gidiyor. Neden olduğunu anlayamadım. Yardımcı olabilirseniz sevinirim.
 
Çözüm
@Aerosteon hocamızın dediği gibi lambda kullanabilirsiniz:
Python:
self.ui.gonder.clicked.connect(lambda basliga_gir: basliga_gir())



Ayrıca lineEdit tanımlı değil.
Lambda ekleyince açılıyor, fakat dediğim gibi Process finished with exit code -1073740791 (0xC0000409) hatasını veriyor. Ve aslında tanımlıydı. Güncel kodları paylaşmayı unuttum. Hemen güncel olanı atayım.

Python:
import sys
from tkinter.messagebox import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from arayuz import *
from selenium import webdriver
from selenium.webdriver.common.by import By as by
from selenium.webdriver.common.keys import Keys as key

import time
import sqlite3

class entryCekici(QMainWindow):
    def __init__(self):
        super().__init__()
        self.ui = Ui_eksi_sozluk_entry()
        self.ui.setupUi(self)
        self.link = self.ui.entry_link.text()

        self.ui.gonder.clicked.connect(lambda: entryCekici.basligagit(self))


    def basligagit(self):
        self.browser = webdriver.Chrome()
        self.browser.get(self.link)


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

@egoistpizza hocam sorunu çözdüm.

Sorun; programı başlattığımda, "self.link" methodu Textbox'un ilk halini, yani boş halini çekiyormuş. Bu self.link değişkenini "basligagit()" methoduna atadığımda düzeldi.
Lambda fonksiyonu kullanın;
lambda: self.method()
Ya da lambda fonksiyonu olmadan ve parantezleri kaldırarak kullanın.
self.method


Hem neden direk aynı sınıf içerisinden methoda ulaşmak yerine aynı sınıf ismini belirtip ulaşıyorsunuz(bunun bir adı vardı şimdilik unuttum)
 
Lambda fonksiyonu kullanın;
lambda: self.method()
Ya da lambda fonksiyonu olmadan ve parantezleri kaldırarak kullanın.
self.method


Hem neden direk aynı sınıf içerisinden methoda ulaşmak yerine aynı sınıf ismini belirtip ulaşıyorsunuz(bunun bir adı vardı şimdilik unuttum)
Nasıl yani? Dediğinizi tam anlayamadım.

Bu arada lambda fonksiyonunu parantezlerin içerisine girdim ve butona tıkladığımda tepki vermeden kapanıyor.
Kod:
self.ui.gonder.clicked.connect(lambda:self.basliga_gir(self))
 
Arayüz dosyasını da atabilir misiniz?
Atayım hocam. Bir de şöyle bir hata alıyorum: Process finished with exit code -1073740791 (0xC0000409)

QtDesigner ile yaptım arayüzü.

Arayüz:

Python:
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'arayuz.ui'
#
# Created by: PyQt5 UI code generator 5.15.6
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_eksi_sozluk_entry(object):
    def setupUi(self, eksi_sozluk_entry):
        eksi_sozluk_entry.setObjectName("eksi_sozluk_entry")
        eksi_sozluk_entry.resize(664, 190)
        eksi_sozluk_entry.setMinimumSize(QtCore.QSize(0, 0))
        eksi_sozluk_entry.setMaximumSize(QtCore.QSize(7777, 7777))
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("Eksisozluk.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        eksi_sozluk_entry.setWindowIcon(icon)
        self.centralwidget = QtWidgets.QWidget(eksi_sozluk_entry)
        self.centralwidget.setObjectName("centralwidget")
        self.yazi31 = QtWidgets.QLabel(self.centralwidget)
        self.yazi31.setGeometry(QtCore.QRect(20, 10, 631, 41))
        font = QtGui.QFont()
        font.setPointSize(22)
        self.yazi31.setFont(font)
        self.yazi31.setObjectName("yazi31")
        self.gonder = QtWidgets.QPushButton(self.centralwidget)
        self.gonder.setGeometry(QtCore.QRect(570, 90, 75, 31))
        font = QtGui.QFont()
        font.setPointSize(12)
        self.gonder.setFont(font)
        self.gonder.setObjectName("gonder")
        self.gizle_program = QtWidgets.QCheckBox(self.centralwidget)
        self.gizle_program.setGeometry(QtCore.QRect(210, 110, 251, 17))
        self.gizle_program.setObjectName("gizle_program")
        self.kapat_program = QtWidgets.QCheckBox(self.centralwidget)
        self.kapat_program.setGeometry(QtCore.QRect(210, 130, 251, 17))
        self.kapat_program.setObjectName("kapat_program")
        self.entry_link = QtWidgets.QLineEdit(self.centralwidget)
        self.entry_link.setGeometry(QtCore.QRect(20, 50, 621, 31))
        font = QtGui.QFont()
        font.setPointSize(12)
        self.entry_link.setFont(font)
        self.entry_link.setObjectName("entry_link")
        eksi_sozluk_entry.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(eksi_sozluk_entry)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 664, 21))
        self.menubar.setObjectName("menubar")
        eksi_sozluk_entry.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(eksi_sozluk_entry)
        self.statusbar.setObjectName("statusbar")
        eksi_sozluk_entry.setStatusBar(self.statusbar)

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

    def retranslateUi(self, eksi_sozluk_entry):
        _translate = QtCore.QCoreApplication.translate
        eksi_sozluk_entry.setWindowTitle(_translate("eksi_sozluk_entry", "Ekşi Sözlük"))
        self.yazi31.setText(_translate("eksi_sozluk_entry", "Entry\'leri çekilecek başlığı gir:"))
        self.gonder.setText(_translate("eksi_sozluk_entry", "Yolla"))
        self.gizle_program.setText(_translate("eksi_sozluk_entry", "Entryler çekilirken programı gizle"))
        self.kapat_program.setText(_translate("eksi_sozluk_entry", "Entryler çekildikten sonra programı kapat"))


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

@egoistpizza hocam kontrol ettiniz mi ? Gerçekten kafamın içinde bir çorba oluştu. Düzeltemiyorum ne yaparsam yapayım.
 
Son düzenleme:
@Aerosteon hocamızın dediği gibi lambda kullanabilirsiniz:
Python:
self.ui.gonder.clicked.connect(lambda basliga_gir: basliga_gir())



Ayrıca lineEdit tanımlı değil.
Lambda ekleyince açılıyor, fakat dediğim gibi Process finished with exit code -1073740791 (0xC0000409) hatasını veriyor. Ve aslında tanımlıydı. Güncel kodları paylaşmayı unuttum. Hemen güncel olanı atayım.

Python:
import sys
from tkinter.messagebox import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from arayuz import *
from selenium import webdriver
from selenium.webdriver.common.by import By as by
from selenium.webdriver.common.keys import Keys as key

import time
import sqlite3

class entryCekici(QMainWindow):
    def __init__(self):
        super().__init__()
        self.ui = Ui_eksi_sozluk_entry()
        self.ui.setupUi(self)
        self.link = self.ui.entry_link.text()

        self.ui.gonder.clicked.connect(lambda: entryCekici.basligagit(self))


    def basligagit(self):
        self.browser = webdriver.Chrome()
        self.browser.get(self.link)


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

@egoistpizza hocam sorunu çözdüm.

Sorun; programı başlattığımda, "self.link" methodu Textbox'un ilk halini, yani boş halini çekiyormuş. Bu self.link değişkenini "basligagit()" methoduna atadığımda düzeldi.
 
Son düzenleme:
Çözüm
@Egoistt hocam sorunu çözdüm.

Sorun; programı başlattığımda, "self.link" methodu Textbox'un ilk halini, yani boş halini çekiyormuş. Bu self.link değişkenini "basligagit()" methoduna atadığımda düzeldi.

Evet hocam, ben de onu düzeltmeye çalışıyordum. Temel sorun, self.link değişkeninin linki almamasıydı. Çünkü link string olarak verildiğinde sorunsuz çalışıyordu. Ellerinize sağlık, dediğiniz şekilde sorunsuz çalışıyor. 👍

1655570032370.png
 
Evet hocam, ben de onu düzeltmeye çalışıyordum. Temel sorun, self.link değişkeninin linki almamasıydı. Çünkü link string olarak verildiğinde sorunsuz çalışıyordu. Ellerinize sağlık, dediğiniz şekilde sorunsuz çalışıyor. 👍

Eki Görüntüle 1424093
Çok ufak bir hata ama saatlerimi aldı ya. Kafamı inanılmaz derece mahvetti gerçekten :D Sizi de yordum kusuruma bakmayın.
 

Technopat Haberler

Yeni konular

Geri
Yukarı