Найти - Пользователи
Полная версия: Асинхронный запуск
Начало » Python для новичков » Асинхронный запуск
1 2
Darkhan
scidam
Это все меняет. У меня нет достаточного опыта разработки GUI, а установить и попобовать сейчас Pyqt у меня нет возможности. Однако, сразу могу сказать, что много странных вещей:1) странно, что класс Gui определен внутри __name__ == ‘__main__’; Вы планируете использовать программу как модуль, если нет, то вообще не нужно это условие __name__ == ‘__main__’2) Gui класс – а зачем он, если у него нет методов; вместо класса Gui можно и так: gui = {'app_label': None, ‘win’: None, …} т.е. использовать просто словарь; скорее всего, конечно, класс нужен, с подходящими методами; но в рамках данной структуры программы – он не нужен. 3)
а ты знаешь как сделать так чтобы потоки могли взаимодействовать между собой. Допустим имеется управляющий поток, в управляющем потоке есть переменная a = input(), есть второй поток функция, которая ждет ввод с клавиатуры и полученное число складывает допусим на 5.
ziro
Посмотрите здесь: https://nikolak.com/pyqt-threading-tutorial/ мне кажется это пример по проблеме схожей с Вашей.
PEHDOM
Darkhan
это понятно, но вот оба потока не могут брать данные с одной переменной.
почему? Они же читают а не пишут туда. Вторых есть блокировки. В третьих данные можно предавать в виде аргументов а не брать “втупую”
например
 import sys, time
from threading import Thread
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class Gui(QWidget):
    def __init__(self):
        super().__init__()
        self.btn = QPushButton(self,text='Click')
        self.btn.clicked.connect(self.btn_click)
        self.loginLabel = QLabel(self,text='Login:')
        self.passwdLabel = QLabel(self,text='Password:')
        self.login = QLineEdit(self)
        self.passwd = QLineEdit(self)
        self.layout = QGridLayout(self)
        self.layout.addWidget(self.loginLabel, 0, 0)
        self.layout.addWidget(self.login, 0, 1)
        self.layout.addWidget(self.passwdLabel, 1, 0)
        self.layout.addWidget(self.passwd, 1, 1)
        self.layout.addWidget(self.btn, 2, 0,1,2)
        self.show()
    def btn_click(self):
        login = self.login.text()
        passwd = self.passwd.text()
        if login and passwd:
            p = Thread(target=self.auth, args=(login, passwd))
            p.start()
        else:
            print('login or password empty')
    def auth(self,login, passwd):
        for i in range (10):
            print( 'trying connect to server with login: {} passwd: {}'.format(login, passwd))
            time.sleep(1)
        print('connection established with login: {} passwd: {}'.format(login, passwd))
if __name__ == '__main__':
    myApp = QApplication(sys.argv)
    gui = Gui()
    sys.exit(myApp.exec_())
и никаких конфликтов
Darkhan
PEHDOM
спасибо большое!!!! ты лучший, именно твой пример помог мне решить мою задачи. Спасибо большое!!!! блин реально выручил, столько радости. Дай Бог тебе всего самого хорошего что есть на нашем свете!!!
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