Pyqt5 spinbox değeri okurken yenilenmeme sorunu

Merhaba,
Yazdığım programda bir spinbox oluşturdum. Range(0,9) olarak ayarlı ve print(spinbox_2.value()) olarak değerini okuyabiliyorum. Range’in ilk parametresinde 0 olduğu için default olarak sıfır yazılı olmuş oluyor. Print fonksiyonu çalıştığında ise bana ilk değer olan 0 ı söylesede sanırım kod tekrardan yenilenmediği için değeri değiştirdiğimde consola yansımıyor. İsterseniz kodu paylaşabilirim. Paylaşmamı istediğiniz takdirde kodun ilgili kısmını mı yoksa tamanını mı paylaşmam gerektiğini de yazarsanız sevinirim.
Şimdiden teşekkürler!

Ekrana yazdırdığınız işlemi bir döngüye almalısınız (while gibi).

@gbcybermastertr
evt şöyle yapmıştım :
İlk olarak bütün kodu while True ye aldım. bu sefer pencere açılsada üzerine eklediğim butonlar vb. gelmedi.
sonra printi aldım. bu sefer consolda sürekli sıfır değeri okunmaya başladı ama pencere açılmadığı için spinboxta değişiklik yapamadım.
Birkaç deneme sonrasında da ya pencere açılmadı ya açılsada üzerine hiçbir şey gelmedi ya da print fonksiyonu bir kez çalıştı.
While True yi nereye koymalıyım?

Kodu atarsanız yardımcı olabiliriz.Sorun ile alakalı olan yerleri atarsanız daha iyi olur.

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

import sys

class Window(QWidget):
def init(self):
super().init()
self.title = “PyQt5 Window”
self.setWindowTitle(self.title)
self.setGeometry(0, 0, 300, 500)
Window.setFixedSize(self,300,575)

    spinbox_1 = QSpinBox(self)
    spinbox_1.setRange(0,99)
    spinbox_1.setGeometry(100,100,40,30)

    print(spinbox_1.value())
    self.show()

if name == “main”:
App = QApplication(sys.argv)
window = Window()
sys.exit(App.exec())

kodun en basit hali bu . İçten yazmayı özemedim kusura bakma o yüzden. While nerede olmalı?

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

import sys

class Window(QWidget):
    def init(self):
        super().init()
        self.title = “PyQt5 Window”
        self.setWindowTitle(self.title)
        self.setGeometry(0, 0, 300, 500)
        Window.setFixedSize(self,300,575)

        spinbox_1 = QSpinBox(self)
        spinbox_1.setRange(0,99)
        spinbox_1.setGeometry(100,100,40,30)

        print(spinbox_1.value())
        self.show()

if __name__ == '__main__':
    App = QApplication(sys.argv)
    window = Window()
    sys.exit(App.exec())

kodun düzenli hali

@Emerald_Gamer teşekkürler while ın nerde olması hakkında bir bilginiz varmı?

Spinboxta anlık değer okumak istiyorsak aynı push buttonlarda kullandığımıza benzer bir sinyal yapısı kullanırız. Bu yapı Spinboxta valueChanged sinyalidir. Örnek kodu inceleyin anlayacaksınız:

class Main(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Deneme")
        self.setGeometry(450,150,300,300)
        self.UI()
        self.show()

    def UI(self):
        self.widgets()
        self.layouts()

    def widgets(self):
        self.spinBox = QSpinBox()
        self.spinBox.valueChanged.connect(self.printValue)

    def layouts(self):
        self.mainLayout = QVBoxLayout()
        self.mainLayout.addWidget(self.spinBox)
        self.setLayout(self.mainLayout)

    def printValue(self):
        print(self.spinBox.value())

def main():
    App = QApplication(sys.argv)
    window = Main()
    sys.exit(App.exec_())

if __name__ == "__main__":
    main()

valueChanged sinyali Spinboxta her değer değiştiğinde istediğimiz bir fonksiyonu çağırıyor. Bu fonksiyonla da istediğimizi yapabiliriz. Sizin istediğiniz değer yazdırmak olduğundan bunu yaptırdım. Anlamadığınız bir yer varsa lütfen sorun.

@batihanefe evt teşekkür ederim peki self.spinBox.value() değerini def in dışında nasıl kullanabilirim. Çünkü yazdığım kodda spinbox değerine göre nesnenin rengi değişecek ama şu kodu yazdığımda bi değişiklik olmuyor: (def dışında yazınca ekranda değişiyor bu seferde spin değerine göre değiştirmemiş oluyorum)

def spinChanged_2():
            value_2 = self.spinbox_2.value()

            if value_2 == 0:
                button_6 = QPushButton("",self)
                button_6.setGeometry(139,31,50,47)
                pixmap_6 = QPixmap("RC2_V0.png")
                button_6.setIcon(QIcon(pixmap_6))
                button_6.setIconSize(QSize(50,37))
                button_6.setStyleSheet("border: none;")

            elif value_2 == 1:
                button_6 = QPushButton("",self)
                button_6.setGeometry(139,31,50,47)
                pixmap_6 = QPixmap("RC2_V1.png")
                button_6.setIcon(QIcon(pixmap_6))
                button_6.setIconSize(QSize(50,37))
                button_6.setStyleSheet("border: none;")

            elif value_2 == 2:
                button_6 = QPushButton("",self)
                button_6.setGeometry(139,31,50,47)
                pixmap_6 = QPixmap("RC2_V2.png")
                button_6.setIcon(QIcon(pixmap_6))
                button_6.setIconSize(QSize(50,37))
                button_6.setStyleSheet("border: none;")
            elif value_2 == 3:
                button_6 = QPushButton("",self)
                button_6.setGeometry(139,31,50,47)
                pixmap_6 = QPixmap("RC2_V3.png")
                button_6.setIcon(QIcon(pixmap_6))
                button_6.setIconSize(QSize(50,37))
                button_6.setStyleSheet("border: none;")
            elif value_2 == 4:
                button_6 = QPushButton("",self)
                button_6.setGeometry(139,31,50,47)
                pixmap_6 = QPixmap("RC2_V4.png")
                button_6.setIcon(QIcon(pixmap_6))
                button_6.setIconSize(QSize(50,37))
                button_6.setStyleSheet("border: none;")
            elif value_2 == 5:
                button_6 = QPushButton("",self)
                button_6.setGeometry(139,31,50,47)
                pixmap_6 = QPixmap("RC2_V5.png")
                button_6.setIcon(QIcon(pixmap_6))
                button_6.setIconSize(QSize(50,37))
                button_6.setStyleSheet("border: none;")
            elif value_2 == 6:
                button_6 = QPushButton("",self)
                button_6.setGeometry(139,31,50,47)
                pixmap_6 = QPixmap("RC2_V6.png")
                button_6.setIcon(QIcon(pixmap_6))
                button_6.setIconSize(QSize(50,37))
                button_6.setStyleSheet("border: none;")
            elif value_2 == 7:
                button_6 = QPushButton("",self)
                button_6.setGeometry(139,31,50,47)
                pixmap_6 = QPixmap("RC2_V7.png")
                button_6.setIcon(QIcon(pixmap_6))
                button_6.setIconSize(QSize(50,37))
                button_6.setStyleSheet("border: none;")
            elif value_2 == 8:
                button_6 = QPushButton("",self)
                button_6.setGeometry(139,31,50,47)
                pixmap_6 = QPixmap("RC2_V8.png")
                button_6.setIcon(QIcon(pixmap_6))
                button_6.setIconSize(QSize(50,37))
                button_6.setStyleSheet("border: none;")
            elif value_2 == 9:
                button_6 = QPushButton("",self)
                button_6.setGeometry(139,31,50,47)
                pixmap_6 = QPixmap("RC2_V9.png")
                button_6.setIcon(QIcon(pixmap_6))
                button_6.setIconSize(QSize(50,37))
                button_6.setStyleSheet("border: none;")

Teşekkürler

Şimdi bunu iki şekilde de yapabiliriz. Bağladığımız fonksiyona şunu yazabiliriz. Birinci yöntem:

    def UI(self):
        self.widgets()
        self.layouts()

    def widgets(self):
        self.spinBox = QSpinBox()
        self.spinBox.valueChanged.connect(self.printValue)
        self.pushButton = QPushButton("Buton")

    def layouts(self):
        self.mainLayout = QVBoxLayout()
        self.mainLayout.addWidget(self.spinBox)
        self.mainLayout.addWidget(self.pushButton)
        self.setLayout(self.mainLayout)

    def printValue(self):
        print(self.spinBox.value())
        if self.spinBox.value() == 10:
            self.pushButton.setStyleSheet("background-color:Orange;")
        elif self.spinBox.value() == 20:
            self.pushButton.setStyleSheet("background-color:Purple;")
        else:
            self.pushButton.setStyleSheet("background-color:Blue;")

Burada gördüğünüz üzere değer 10 olunca turuncu, 20 olunca mor başka herhangi bir değerde mavi yapıyoruz. Başlangıçta ise renksiz bunun sebebi ise sinyalimiz değer değiştiğinde çalışıyor dolayısıyla fonksiyonda değer değiştiğinde çağrılıyor. İkinici yöntem ise direk widget fonksiyonu içerisinde bu yazdığım koşul bloklarını yazabilirsin ancak ilk yöntem daha temiz bir kod görünümü sağlar.

Teşekkür ederim işime yaradı

Ne demek kolay gelsin :wink: