Задать вопрос
Ответы пользователя по тегу PyQt
  • Как в PyQt4 сделать, чтобы поток слышал сигнал от GUI?

    @Sergey6661313
    код не смотрел но:
    self.emit - переводя на русский получается послать сигнал себе.
    self.worker.emit - должно сработать...

    А вообще на до делать по современному (в reference guide отлично расписано, жалко что только по английски. ):
    class MainWindow(QtGui.QMainWindow):
        ...ваша простыня...
        def stop(self):  # остановка
            self.worker.stoping.emit() # да-да просто обрящяемся к сигналу stoping
            self.doneChecking()  # изменяем состояние виджетов гуи
        ... остальные куски вашей простыни...
    
    
    class Worker(QtCore.QObject): 
        stoping = pyqtSignal()   # сообственно наш сигнал. инициализировать нужно именно тут а не в init это важно, но я хз почему. Может ругнутся на то что не видит  pyqtSignal - тут зависит от того как вы импортировали qt и какая у вас версия его. QtCore.pyqtSignal() или QtCore.Qt.pyqtSignal() пробуйте сами короче.
        
        def __init__(self):
            super().__init__() 
            self.stoping.connect(self.stopFlag) # соединяем наш сигнал с вашим методом.
    
        ...остальная часть вашего кода...

    другие сигналы аналогично.
    и последнее мне кажется что в методе run нужно
    while self.exiting:
    иначе через час работы процесс просто завершится. (хотя может так и задумано?)

    и вообще в проверке if not self.exiting: # пока не нажали кнопку Stop.
    если не сделать
    else:
        return

    то выше назначенный цикл for продолжит свою работу просто игнорируя все записи.
    Ответ написан
    Комментировать
  • Как при двойном клике по строке в таблице произвести поиск из другой таблицы?

    @Sergey6661313
    1) #Значение id из dbtable_2 необходимо выяснить до того как вы его вызовете.
    #Значения строки, столбца
        row = mod_inx.row()
        column = mod_inx.column()
    
        #Значение id из dbtable_2
        id_search =  main_window.tableView_1.model().index(row, 2).data()
    нужно поставить в начало функции а не в конец...

    2) запрос это текст вот и операторы используйте как для текста:
    query = "SELECT * FROM dbtable_2 WHERE id = " + str(id_search)
    result_model.setQuery(query)


    3) предлагаю использовать peewee для чтения и записи sqlite таблиц (на хабре есть примеры). Он быстрый и удобный.
    Ответ написан
    3 комментария
  • Как создать новое окно в PyQt5?

    @Sergey6661313
    причина: переменная new_window умирает сразу как заканчивается функция new_form() (почему? во славу Сатаны конечно!)
    Пути решения:

    1) создать какую нибудь глобальную переменную. Но глобальные переменные это плохой тон (незнаю почему) :
    new_window = None
    def new_form():   
        global new_window
        new_window = uic.loadUi("interface2.ui")
        new_window.setWindowTitle("New form")
        new_window.show()


    2) создать переменную глобальный массив окон (так делаю я - это всё ещё "плохой тон" но зато потом можно циклом разом удалить все создаваемые окна например...) :
    мой_список_окон = []
    def new_form():   
        global мой_список_окон
        new_window = uic.loadUi("interface2.ui")
        new_window.setWindowTitle("New form")
        new_window.show()
        мой_список_окон.append(new_window)


    3) назначить new_window дочерю main_window (идиологически правильный вариант):
    def new_form(parent):   
        new_window = uic.loadUi("interface2.ui")
        new_window.setWindowTitle("New form")
        new_window.show()
        new_window.setParent(parent)
    
    import test2
    main_window.pushButton.clicked.connect(lambda: test2.new_form(main_window))


    4) new_window должна быть переменной того обьекта который гарантировано не будет удалён (незнаю насчёт идиалогии... все варианты правильные. ):
    def new_form(parent):   
        parent.new_window = uic.loadUi("interface2.ui")
        parent.new_window.setWindowTitle("New form")
        parent.new_window.show()
    
    
    import test2
    main_window.pushButton.clicked.connect(lambda: test2.new_form(main_window))
    Ответ написан
    3 комментария