Форум сайта python.su
Venusа как нужно получать? можно написать метод котороый будет возвращать все значения в виде словаря\списка, а можно для каждого писать отдельный метод\коннект, или прописывать eventFilter, котороый будет перехватывать все евенты типа valueChanged , определять источник евента, и дальше уже в зависимости от источника (не)выполнять какието действия,
а если не один спинбокс?в код дописывать или тоже через деф?
Venusа я понимаю не так, потому как после выплнения app.exec_() запускается главный обработчик событий КУТЕ (бесконечный цикл, грубо говоря), и скрипт дальше не будет работать пока этот обработчик не завершит свою работу, поэтму для большего понимания хотелось бы увидеть небольшой рабочий пример глобального использования, хотябы пускай оно делает банальный print(r).
использовать собираюсь в глобальной(так понимаю)
[code python][/code]
Офлайн
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)
Офлайн
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)
Офлайн
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)
Офлайн
rami))) прикольно и не по теме ))
Офлайн
както получить значения r и t/ но “Баю, баюшки баю,…" повеселил передать из окна(виджета) в скрипт
Офлайн
а это вы привели пример как создать окно! но у меня уже есть созданный шаблон в кутэ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()
Офлайн
я так понимаю этот пример с несколькими будет выглядеть так
…
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)
Офлайн
VenusДа неважно, вот я вам дал простое окно с двумя спинбоксами, вставте его в ваш скрипт чтобы оно работало так как вы хотите, потому как я уже писал выше , после выплнения app.exec_() запускается главный обработчик событий КУТЕ (бесконечный цикл, грубо говоря), и скрипт дальше не будет работать пока этот обработчик не завершит свою работу. А когда он завершит работу, то вобщем уже не важно как вы будете передавать ваши значения, потому как там всеравно будут только последние актуальные значения, и у вас не выйдет менять их “на ходу”.
а это вы привели пример как создать окно! но у меня уже есть созданный шаблон в кутэ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.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)
Офлайн
Venusчто вы хотите дописывать в __init__ ? вызывать тогда когда вам нужно, или оно само вызовется если связано с какимто событием.
а вызывать defы как? дописать в def init
[code python][/code]
Отредактировано PEHDOM (Июль 12, 2018 15:09:01)
Офлайн