Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » QSpinBox Qt5 передача значения в питон [RSS Feed]

#1 Июль 11, 2018 10:10:32

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

QSpinBox Qt5 передача значения в питон

Venus
а если не один спинбокс?в код дописывать или тоже через деф?
а как нужно получать? можно написать метод котороый будет возвращать все значения в виде словаря\списка, а можно для каждого писать отдельный метод\коннект, или прописывать eventFilter, котороый будет перехватывать все евенты типа valueChanged , определять источник евента, и дальше уже в зависимости от источника (не)выполнять какието действия,
Venus
использовать собираюсь в глобальной(так понимаю)
а я понимаю не так, потому как после выплнения app.exec_() запускается главный обработчик событий КУТЕ (бесконечный цикл, грубо говоря), и скрипт дальше не будет работать пока этот обработчик не завершит свою работу, поэтму для большего понимания хотелось бы увидеть небольшой рабочий пример глобального использования, хотябы пускай оно делает банальный print(r).



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#2 Июль 12, 2018 12:33:33

Venus
Зарегистрирован: 2017-05-19
Сообщения: 55
Репутация: +  0  -
Профиль   Отправить e-mail  

QSpinBox Qt5 передача значения в питон

PEHDOM
#-*- coding: utf-8 -*-
import time

r = ()
t = ()

def start():
if t == 2:
print(t)
time.sleep(r)
else:
print(t)
time.sleep(r)
while True:
time.sleep(r/2)

Отредактировано Venus (Июль 12, 2018 12:33:59)

Офлайн

#3 Июль 12, 2018 13:07:13

rami
Зарегистрирован: 2018-01-08
Сообщения: 280
Репутация: +  71  -
Профиль   Отправить e-mail  

QSpinBox Qt5 передача значения в питон

Venus
 #-*- coding: utf-8 -*-
import time
r = ()
t = ()
def start():
    if t == 2:
        print(t)
        time.sleep(r)
   else:
     print(t)
     time.sleep(r)
while True:
    time.sleep(r/2)

Переменные r = () и t = () вы определяете как кортежи, можете проверить с помощью type(r) и type(t). Как понимать time.sleep(r) ??? Это типа: “Баю, баюшки баю, спи кортежик, мать твою…”?

Проверьте типы переменных.

Офлайн

#4 Июль 12, 2018 13:24:46

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

QSpinBox Qt5 передача значения в питон

Venus
и куда, по вашему, тут прикрутить PyQt? он будет выполняться в отдельном потоке или процессе?
так там тогда совсем другие механизмы работают.
Вот простой класс, его можно запустить и оно заработает, как вы его видите в своем коде?

 #
import sys
from PyQt4 import QtGui
class MainWindow(QtGui.QWidget):
    def __init__(self, parent = None):
        super().__init__(parent = parent)
        self.layout = QtGui.QGridLayout(self)
        # r
        self.r_label = QtGui.QLabel(self, text = 'r:')
        self.r = QtGui.QSpinBox(self)
        self.r.setRange(1, 10)
        self.r.setSingleStep(1)
        self.layout.addWidget(self.r_label, 0, 0)
        self.layout.addWidget(self.r, 0, 1)
        # t
        self.t_label = QtGui.QLabel(self, text = 't:')
        self.t = QtGui.QSpinBox(self)
        self.t.setRange(1, 10)
        self.t.setSingleStep(1)
        self.layout.addWidget(self.t_label, 1, 0)
        self.layout.addWidget(self.t, 1, 1)
        self.show()
    def get_r(self):
        return self.r.value()
    def get_t(self):
        return self.t.value()

rami
Переменные r = () и t = () вы определяете как кортежи
не партесь, наверно человек имел ввиду что там нужно както получить значения r и t/ но “Баю, баюшки баю,…" повеселило



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Июль 12, 2018 13:26:32)

Офлайн

#5 Июль 12, 2018 14:20:10

Venus
Зарегистрирован: 2017-05-19
Сообщения: 55
Репутация: +  0  -
Профиль   Отправить e-mail  

QSpinBox Qt5 передача значения в питон

rami
))) прикольно и не по теме ))

Офлайн

#6 Июль 12, 2018 14:21:26

Venus
Зарегистрирован: 2017-05-19
Сообщения: 55
Репутация: +  0  -
Профиль   Отправить e-mail  

QSpinBox Qt5 передача значения в питон

както получить значения r и t/ но “Баю, баюшки баю,…" повеселил передать из окна(виджета) в скрипт

Офлайн

#7 Июль 12, 2018 14:27:06

Venus
Зарегистрирован: 2017-05-19
Сообщения: 55
Репутация: +  0  -
Профиль   Отправить e-mail  

QSpinBox Qt5 передача значения в питон

а это вы привели пример как создать окно! но у меня уже есть созданный шаблон в кутэ6 дизайнер - mainwindow.ру, запускаю main.py! и есть скрипт(модуль) питон sample.py. вот на окне есть спин боксы(читал книгу и всякое всякое обясняется на с++ у меня не так много(пока) познаний в питоне чтоб примеры на с++ переделать на питон) пример привели но для одного спина (там в окне несколько) а для двух как?
#
import sys
from PyQt4 import QtGui
class MainWindow(QtGui.QWidget):
def __init__(self, parent = None):
super().__init__(parent = parent)
self.layout = QtGui.QGridLayout(self)
# r
self.r_label = QtGui.QLabel(self, text = ‘r:’)
self.r = QtGui.QSpinBox(self)
self.r.setRange(1, 10)
self.r.setSingleStep(1)
self.layout.addWidget(self.r_label, 0, 0)
self.layout.addWidget(self.r, 0, 1)
# t
self.t_label = QtGui.QLabel(self, text = ‘t:’)
self.t = QtGui.QSpinBox(self)
self.t.setRange(1, 10)
self.t.setSingleStep(1)
self.layout.addWidget(self.t_label, 1, 0)
self.layout.addWidget(self.t, 1, 1)
self.show()
def get_r(self):
return self.r.value()
def get_t(self):
return self.t.value()

Офлайн

#8 Июль 12, 2018 14:30:53

Venus
Зарегистрирован: 2017-05-19
Сообщения: 55
Репутация: +  0  -
Профиль   Отправить e-mail  

QSpinBox Qt5 передача значения в питон

я так понимаю этот пример с несколькими будет выглядеть так

class MainWindow(QtWidgets.QMainWindow):
……
def getSomeVal(self):
return self.ui.spinbox.value()
def getSomeVal1(self):
return self.ui.spinbox_2.value()
…..
myapp = MainWindow()
….
r = myapp.getSomeVal()
t = myapp.getSomeVal2()
и т.д

а вызывать defы как? дописать в def init
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
QtWidgets.QWidget.__init__(self, parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.statusBar().showMessage('Stop')
self.ui.StartpushButton.clicked.connect(self.str)
self.ui.StoppushButton_2.clicked.connect(self.Stop)
self.ui.StartpushButton.clicked.connect(lambda: self.statusBar().showMessage(' запущен'))
self.ui.StoppushButton_2.clicked.connect(lambda: self.statusBar().showMessage(' остановлен'))

def str(self):

pass

def Stop(self):

Отредактировано Venus (Июль 12, 2018 14:34:52)

Офлайн

#9 Июль 12, 2018 14:49:26

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

QSpinBox Qt5 передача значения в питон

Venus
а это вы привели пример как создать окно! но у меня уже есть созданный шаблон в кутэ6 дизайнер - mainwindow.ру, запускаю main.py! и есть скрипт(модуль) питон sample.py. вот на окне есть спин боксы(читал книгу и всякое всякое обясняется на с++ у меня не так много(пока) познаний в питоне чтоб примеры на с++ переделать на питон) пример привели но для одного спина (там в окне несколько) а для двух как?
Да неважно, вот я вам дал простое окно с двумя спинбоксами, вставте его в ваш скрипт чтобы оно работало так как вы хотите, потому как я уже писал выше , после выплнения app.exec_() запускается главный обработчик событий КУТЕ (бесконечный цикл, грубо говоря), и скрипт дальше не будет работать пока этот обработчик не завершит свою работу. А когда он завершит работу, то вобщем уже не важно как вы будете передавать ваши значения, потому как там всеравно будут только последние актуальные значения, и у вас не выйдет менять их “на ходу”.
Вот наглядный пример если так проще
 #
import sys
from PyQt4 import QtGui
class MainWindow(QtGui.QWidget):
    def __init__(self, parent = None):
        super().__init__(parent = parent)
        self.layout = QtGui.QGridLayout(self)
        # r
        self.r_label = QtGui.QLabel(self, text = 'r:')
        self.r = QtGui.QSpinBox(self) # Создаем спинбокс
        self.r.setObjectName('r') # Устанавлваем имя виджета, чтобы понимать кто отправитель события
        self.r.setRange(1, 10)
        self.r.setSingleStep(1)
        self.layout.addWidget(self.r_label, 0, 0)
        self.layout.addWidget(self.r, 0, 1)
        # t
        self.t_label = QtGui.QLabel(self, text = 't:')
        self.t = QtGui.QSpinBox(self) # Создаем спинбокс
        self.t.setObjectName('t') # Устанавлваем имя виджета, чтобы понимать кто отправитель события
        self.t.setRange(1, 10)
        self.t.setSingleStep(1)
        self.layout.addWidget(self.t_label, 1, 0)
        self.layout.addWidget(self.t, 1, 1)
        self.t.installEventFilter(self)
        self.r.valueChanged.connect(self.r_changed) # соединяем каждый спинбокс с своим слотом
        self.t.valueChanged.connect(self.t_changed) # соединяем каждый спинбокс с своим слотом
        self.r.valueChanged.connect(self.changed) # соединяем все спинбоксы с одним слотом
        self.t.valueChanged.connect(self.changed) # соединяем все спинбоксы с одним слотом
        self.show()
    def get_r(self):
        # возвращает r
        return self.r.value()
    def get_t(self):
        # возвращает t
        return self.t.value()
    def get_all(self):
        # возвращает два значения первое r второе t
        return self.r.value(), self.t.value()
    def get_list_values(self):
        # возвращает кортеж значений, первое r второе t
        return (self.r.value(), self.t.value())
    def get_dict_values(self):
        # возвращает значения в виде словаря
        return {'r':self.r.value(), 't':self.t.value()}
    def r_changed(self, value):
        # должно отработать когда меняют значение r
        print('это метод r_changed, r=', value)
    def t_changed(self, value):
        # должно отработать когда меняют значение t
        print('это метод t_changed, t=', value)
    def changed(self, value):
        # один слот к которому цепляються все спнбоксы, отрабатывает когда меняем значение любого спнбокса
        sender_name = self.sender().objectName()
        print('это метод changed, спинбокс ', sender_name, 'сменил значение', value)
if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    mw = MainWindow()
    print('запуск GUI (главный обработчик событий QT) , выполнение скрипта приостановлено')
    app.exec_() # Вот тут скрипт остановиться пока вы не выйдете из GUI
    print('GUI закрыто, продолжаем выполнение срипта...')
    r = mw.get_r()
    t = mw.get_t()
    print('значения пооnдельности: r=', r, 't= ', t)
    r,t = mw.get_all()
    print('значения вместе:  r=', r, 't= ', t)
    lst = mw.get_list_values()
    print('значения кортежем:', lst)
    dct = mw.get_dict_values()
    print('значения словарем:', dct)



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Июль 12, 2018 15:02:52)

Офлайн

#10 Июль 12, 2018 15:04:34

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

QSpinBox Qt5 передача значения в питон

Venus
а вызывать defы как? дописать в def init
что вы хотите дописывать в __init__ ? вызывать тогда когда вам нужно, или оно само вызовется если связано с какимто событием.
В примере выше все get_… будут вызваны только когда вы их вызовете, а все …changed когда произойдет определенное событие, а именно измениться значение спинбокса.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Июль 12, 2018 15:09:01)

Офлайн

  • Начало
  • » GUI
  • » QSpinBox Qt5 передача значения в питон[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version