Найти - Пользователи
Полная версия: QSpinBox Qt5 передача значения в питон
Начало » GUI » QSpinBox Qt5 передача значения в питон
1 2 3 4 5 6
PEHDOM
Venus
а если не один спинбокс?в код дописывать или тоже через деф?
а как нужно получать? можно написать метод котороый будет возвращать все значения в виде словаря\списка, а можно для каждого писать отдельный метод\коннект, или прописывать eventFilter, котороый будет перехватывать все евенты типа valueChanged , определять источник евента, и дальше уже в зависимости от источника (не)выполнять какието действия,
Venus
использовать собираюсь в глобальной(так понимаю)
а я понимаю не так, потому как после выплнения app.exec_() запускается главный обработчик событий КУТЕ (бесконечный цикл, грубо говоря), и скрипт дальше не будет работать пока этот обработчик не завершит свою работу, поэтму для большего понимания хотелось бы увидеть небольшой рабочий пример глобального использования, хотябы пускай оно делает банальный print(r).
Venus
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)
rami
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) ??? Это типа: “Баю, баюшки баю, спи кортежик, мать твою…”?

Проверьте типы переменных.
PEHDOM
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/ но “Баю, баюшки баю,…" повеселило
Venus
rami
))) прикольно и не по теме ))
Venus
както получить значения r и t/ но “Баю, баюшки баю,…" повеселил передать из окна(виджета) в скрипт
Venus
а это вы привели пример как создать окно! но у меня уже есть созданный шаблон в кутэ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()
Venus
я так понимаю этот пример с несколькими будет выглядеть так

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):
PEHDOM
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)
PEHDOM
Venus
а вызывать defы как? дописать в def init
что вы хотите дописывать в __init__ ? вызывать тогда когда вам нужно, или оно само вызовется если связано с какимто событием.
В примере выше все get_… будут вызваны только когда вы их вызовете, а все …changed когда произойдет определенное событие, а именно измениться значение спинбокса.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB