Положение оператора
Одна из проблем заключается в том, что вы не увеличиваете счетчик при нажатии кнопки, а пытаетесь сделать это в определении класса.
class nextbutton(QPushButton):
window.count += 1
print(window.count)
Две строки выше выполняются только тогда, когда кнопка создана строкой ниже.
mybutton = nextbutton()
Чтобы получить нужный эффект, переместите эти строки в метод function
, который получает сигнал при нажатии кнопки.
class nextbutton(QPushButton):
def function(self):
window.count += 1
print(window.count)
if window.count == 1:
ui.next4.clicked.connect(a)
else:
ui.next4.clicked.connect(b)
Вместо того, чтобы ссылаться на окно,Вы можете сохранить счетчик на самом объекте кнопки.Это позволит вам иметь несколько копий этой кнопки, каждая из которых отслеживает свой текущий счет и ведет себя соответственно.
class nextbutton(QPushButton):
count = 0
def function(self):
self.count += 1
if self.count == 1:
ui.next4.clicked.connect(a)
else:
ui.next4.clicked.connect(b)
Несколько сигналов
Выше все равно не будет работать так, как вы этого хотите, однако,В следующем разделе функции a
и b
будут подключены к сигналу next4
.Поскольку к одному и тому же сигналу может быть подключено несколько слотов, теперь это вызовет 3 поведения - повторный запуск
if self.count == 1:
ui.next4.clicked.connect(a)
else:
ui.next4.clicked.connect(b)
Помните, что если вы здесь, вы уже сработали.Вы можете просто обратиться к функциям напрямую.
if self.count == 1:
a()
else:
b()
Некоторые другие предложения
Следующий фрагмент вашего кода удивителен.У вас есть кнопка, определенная в вашем пользовательском интерфейсе как ui.next4
, но здесь вы создаете еще одну кнопку, просто чтобы удерживать функцию, которую вы используете для вызова другой функции.
mybutton = nextbutton()
ui.next4.clicked.connect(mybutton.function)
Вы можете исключить следующую кнопку исделайте его отдельной функцией:
def nextbutton_clicked(self):
window.count += 1
print(window.count)
if window.count == 1:
a()
else:
b()
Затем просто подключитесь следующим образом:
ui.next4.clicked.connect(nextbutton_clicked)
Наконец, я бы рекомендовал переименовать nextbutton
в NextButton
, поскольку это класс,Это всего лишь соглашение, но его полезно изучить, поскольку оно облегчает чтение вашего кода.Кроме того, я бы порекомендовал другое имя для вашего метода, которое вызывается кнопкой, button_clicked
или аналогичным.