Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 5, 2017 15:58:15

Darkhan
Зарегистрирован: 2017-04-03
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Асинхронный запуск

scidam
Это все меняет. У меня нет достаточного опыта разработки GUI, а установить и попобовать сейчас Pyqt у меня нет возможности. Однако, сразу могу сказать, что много странных вещей:1) странно, что класс Gui определен внутри __name__ == ‘__main__’; Вы планируете использовать программу как модуль, если нет, то вообще не нужно это условие __name__ == ‘__main__’2) Gui класс – а зачем он, если у него нет методов; вместо класса Gui можно и так: gui = {'app_label': None, ‘win’: None, …} т.е. использовать просто словарь; скорее всего, конечно, класс нужен, с подходящими методами; но в рамках данной структуры программы – он не нужен. 3)
а ты знаешь как сделать так чтобы потоки могли взаимодействовать между собой. Допустим имеется управляющий поток, в управляющем потоке есть переменная a = input(), есть второй поток функция, которая ждет ввод с клавиатуры и полученное число складывает допусим на 5.

Офлайн

#2 Апрель 5, 2017 18:07:25

ziro
От:
Зарегистрирован: 2009-08-13
Сообщения: 225
Репутация: +  8  -
Профиль   Отправить e-mail  

Асинхронный запуск

Посмотрите здесь: https://nikolak.com/pyqt-threading-tutorial/ мне кажется это пример по проблеме схожей с Вашей.



Офлайн

#3 Апрель 5, 2017 18:17:18

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

Асинхронный запуск

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_())
и никаких конфликтов



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

Отредактировано PEHDOM (Апрель 5, 2017 19:48:20)

Офлайн

#4 Апрель 5, 2017 21:57:33

Darkhan
Зарегистрирован: 2017-04-03
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Асинхронный запуск

PEHDOM
спасибо большое!!!! ты лучший, именно твой пример помог мне решить мою задачи. Спасибо большое!!!! блин реально выручил, столько радости. Дай Бог тебе всего самого хорошего что есть на нашем свете!!!

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version