Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 27.06.2018
Сообщений: 1
1

Создание и открытие окна в отдельном потоке

24.12.2020, 15:28. Показов 3456. Ответов 1

Author24 — интернет-сервис помощи студентам
Всем добрый день!
Стоит следующая задача: при запуске программы у меня создается объект в трее, и запускается параллельно поток который опрашивает определенное устройство, так же хочу чтобы при нажатии на определенный пункт меню, создавалось и открывалось окно отдельным потоком (чтобы у меня продолжало работать меню трея), где у меня будут находится всякие состояния и настройки, по закрытию окна все его данные в памяти удалялись а при новом вызове из трея окно создавалось заново и т.д. У меня проблема в том что когда открываю в первый раз, все работает нормально, а в следующие разы сыпятся ошибки (RuntimeError: main thread is not in main loop). Если сделать чтобы при нажатии кнопки открытия этого окна, не создавался отдельный поток, то все работает прекрасно, за исключением трея. Для начала вопрос такой можно ли вообще создавать окна в отдельных потоках? А если можно то как правильно это делается? Пробовал даже создавать класс наследник Thread, такая же проблема... Для формирования окно использую PySimpleGUI

Всем заранее спасибо!

Последнее на чем я остановился
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
def main():
    # Начало глобальных переменных
    global serverStop
    global serverRun
    # Конец глобальных переменных
 
    # Выбираем тему
    GUI.theme('DarkBlue2')
 
    # Формируем меню в трее
    trayMenu = ['File', ['&Открыть', '---', '&Управление', ['Включить', 'Отключить'], '&Выход']]
    # Создаем трей
    tray = GUIQT.SystemTray(menu=trayMenu)
 
    # Читаем конфигурационный файл
    if Cfg.config_read(Cfg.config_file_path) == -1:
        Cfg.config_write(Cfg.config_file_path)
 
    # Основной цикл
    while 1:
        menu_item = tray.read()
 
        # x = threading.Thread(target=Polling, daemon=True)
        if menu_item == 'Выход':
            tray.ShowMessage(title='title',
                             message='message',
                             messageicon=GUIQT.SYSTEM_TRAY_MESSAGE_ICON_WARNING,
                             time=3000)
            # break
        elif menu_item == 'Открыть':
            mainWindow('mainWindow1').start()
            print("123")
 
 
class mainWindow(threading.Thread):
    def __init__(self, name):
        super().__init__()
        self.name = name
        # Создаем элементы главного окна
        self.windowLayout = [
            [
                GUI.Text(text='Состояние Modbus TCP сервера', justification='center', size=(60, 1))
            ]
        ]
        # Создаем главное окно с заданными элементами
        self.window = GUI.Window('Мониторинг состояния ABB ATS500', self.windowLayout, font='ArialBlack 12')
 
    def run(self):
        # Основной цикл
        while 1:
            windowEvent, windowValues = self.window.read()
            # Закрытие главного окна
            if windowEvent in (None, 'Exit'):
                break
        self.window.close()
        del self
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.12.2020, 15:28
Ответы с готовыми решениями:

Создание Window окна в отдельном потоке
мне надо чтобы окно создалось в отдельном потоке.. так вот когда я создаю окно выходит ошибка вот...

Открытие формы в отдельном потоке
Добрый день, такой вопрос: имеется главная форма, на ней кнопка, которая делает любую длительную...

Открытие нескольких сайтов, каждого в отдельном потоке
Пытаюсь открыть 5 сайтов из файла, каждый отдельным потоком. Открывается всегда только первый...

Дочернее окно дочернего окна в отдельном потоке
есть окно. создается функцией CreateDialog. у него есть дочернее окно, которое создается в...

Сделать окно запущеное в отдельном потоке модальным для другого окна
Мне нужно создать форму в которой будет отображаться loading gif. Эта форма запускается в отдельном...

1
281 / 198 / 66
Регистрация: 18.09.2019
Сообщений: 390
Записей в блоге: 49
26.12.2020, 19:50 2
Цитата Сообщение от pikpos Посмотреть сообщение
можно ли вообще создавать окна в отдельных потоках?
Скорее всего, нет, если SimpleGUI - какая-то производная от Qt, на что как-бы намекает GUIQT.
0
26.12.2020, 19:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.12.2020, 19:50
Помогаю со студенческими работами здесь

Создание файла в отдельном потоке
Как создавать файл и работать с ним в отдельном потоке? код new Thread(new Runnable() {...

Создание контролов в отдельном потоке
Привет! В общем написал игру, работа которой основана на UserControl'ах. К каждому контролу...

Создание класса в отдельном потоке
Добрый вечер. Как можно сделать чтобы при создании объекта класса он сразу создавался в отдельном...

Создание формы в отдельном потоке в dll
Есть форма-запускатор с двумя кнопками, одна загружает длл, другая выгружает. При присоединению к...

Создание view элементов в отдельном потоке
Беру данные из интернета и делаю блоки. Если информации довольно много то при запуске...

Динамическое создание объектов на ScrollBox в отдельном потоке
Возникла проблема. На ScrollBox'e создаются объекты типа TImage один под другим в отдельном...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru