Форум программистов, компьютерный форум, киберфорум
Python: IDE, инструментарий
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533

Необычная проблема с pyinstaller

01.09.2020, 17:03. Показов 4526. Ответов 41

Студворк — интернет-сервис помощи студентам
Всем здравствуйте! Я тут немного, так сказать, встрял. Нагуглить не смог, поэтому спрашиваю тут, возможно кто-то сталкивался.

Итак, сделал я прогу с PyQt5 интерфейсом, с многопоточностью ну и другой всякой ерундой. Вроде всё работает. Сижу думаю, дайка я сделаю экзешник (тапками не бросайтесь, знаю идея - гов*но). Решил использовать для этих целей pyinstaller. Сделал я значиЦЦо .exe - файл, сижу довольный. Тут мой взор падает на cmd - окошко за моим красивейшим интерфейсом. Хм-м-м. Непорядок. Я открываю либу по pyinstaller, а там то всего и надо то прописать --noconsole. Прописал - программа запускает интерфейс но ничего не делает, кнопочки нажимаются, поля пишутся, а работать - не работает. А вот если не прописывать --noconsole то всё работает. Ребят, спасайте, я самостоятельно догнать не могу.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.09.2020, 17:03
Ответы с готовыми решениями:

Проблема с pyinstaller
Приветствую, я установил pyinstaller через pip написало что всё установлено, а когда пишу pyinstall main.py то выдаёт ошибку...

Проблема с установкой Pyinstaller Версия Python 3.8.3
Проблема с установкой Pyinstaller Версия Python 3.8.3 ============================================ ...

Не работает PyInstaller (При установке PyInstaller не создаётся исполняемый файл)
День добрый всем программистам! :yahoo: Нужна помощь с библиотеками Python, а конкретно с PyInstaller :help: Создал небольшую...

41
5042 / 1069 / 149
Регистрация: 29.01.2013
Сообщений: 6,242
02.09.2020, 00:50
Damenikx, я тут видел уже подобное описание проблем)
1
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
02.09.2020, 08:55  [ТС]
Alli_Lupin, попробую поискать, спасибо.

Добавлено через 19 минут
Поискал по форуму, решения похожей проблемы - нет

Добавлено через 4 минуты
Хм, заметил такую вещь. В консоли (когда уже скомпелировал программу) пишет следующее:

QObject::startTimer: Timers cannot be started from another thread

Может в этом проблема? Но я всё равно не понимаю, как это может быть связано.
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
02.09.2020, 08:59
Damenikx, может у тебя код есть который сможет показать эту ошибку?

Добавлено через 55 секунд
Желательно еще версию Python и PyQt5 узнать, побольше информации, товарищ!
1
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
02.09.2020, 09:08  [ТС]
Может всё дело в том, что я использовал питоновский thread а не QThread?

Добавлено через 22 секунды
DmFat, лады, сейчас всё будет!

Добавлено через 5 минут
Итак, выкладываю сей ужас на смех людской!

Основной файл с программой:
Кликните здесь для просмотра всего текста
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
from PyQt5 import QtWidgets, Qt, QtGui
from Disign.first import Ui_MainWindow
import sys, threading, subprocess, time, platform, datetime, win10toast, os, logging
from win10toast import ToastNotifier
 
 
class ExamplePopup(QtWidgets.QDialog):
    def __init__(self, name, parent=None):
        super().__init__(parent)
        self.name = name
        self.label = QtWidgets.QLabel(self.name, self)
 
 
class mywindow(QtWidgets.QMainWindow):
    def __init__(self):
        self.my_threadProgram = None
        self.my_threadIP = None
        self.my_threadMSG = None
        super(mywindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.labelIP = self.ui.label
        self.lineEditIP = self.ui.lineEdit
        self.lineEditLogin = self.ui.lineEdit_2
        self.lineEditPingIp = self.ui.lineEdit_4
        self.lineEditPassword = self.ui.lineEdit_3
        self.lineEditWorkProgram = self.ui.lineEdit_5
        self.timeRefresh = self.ui.timeEdit
        self.buttonStart = self.ui.pushButton
        self.buttonStop = self.ui.pushButton_2
        self.txtOut = self.ui.listWidget
        self.msg = QtWidgets.QMessageBox()
        self.buttonStart.clicked.connect(self.start_CheckHostIp)
        self.buttonStop.clicked.connect(self.stop_CheckHostIp)
        self.toaster = ToastNotifier()
        self.comboBox = self.ui.comboBox
 
        self.tray_icon = QtWidgets.QSystemTrayIcon(self)
        self.tray_icon.setIcon(self.style().standardIcon(QtWidgets.QStyle.SP_ComputerIcon))
        self.show_action = QtWidgets.QAction("Развернуть", self)
        self.show_action.triggered.connect(self.show)
        self.tray_menu = QtWidgets.QMenu()
        self.tray_menu.addAction(self.show_action)
        self.tray_icon.setContextMenu(self.tray_menu)
        self.tray_icon.show()
 
        self.comboBox.addItem("notepad.exe")
 
    def hideEvent(self, a0: QtGui.QHideEvent) -> None:
        self.hide()
 
    def CheckHostIp(self, doneIP):
        self.takeTime = int(self.timeRefresh.text())
        self.is_run_ip = True
        self.ip = self.lineEditIP.text()
        self.login = self.lineEditLogin.text()
        self.password = self.lineEditPassword.text()
        if self.lineEditIP.text() == "":
            self.txtOut.addItem('Ошибка: ->>>>> Заполните поле с IP-Адресом')
        if self.lineEditLogin.text() == "":
            self.txtOut.addItem('Ошибка: ->>>>> Заполните поле Логина')
        if self.lineEditPassword.text() == "":
            self.txtOut.addItem('Ошибка: ->>>>> Заполните поле пароля', )
        else:
            while self.is_run_ip:
                self.buttonStart.setDisabled(True)
                if subprocess.call(['ping', self.ip], stdout=subprocess.DEVNULL):
                    self.lineEditPingIp.setStyleSheet('background: red')
                    self.lineEditWorkProgram.setStyleSheet('background: red')
                    self.txtOut.addItem(f"{time.ctime()} Конечная машина не пингуется")
                    self.txtOut.scrollToBottom()
                    logging.basicConfig(format="%(asctime)s - %(message)s", filename='Logs.log', level=logging.INFO)
                    logging.info("Конечная машина не пингуется")
                    self.toaster.show_toast("Внимение!", 'Отсутствует пинг программы!', duration=2,
                                            icon_path='ico/error.ico')
                else:
                    self.lineEditPingIp.setStyleSheet('background: green')
                    self.txtOut.addItem(f"{time.ctime()} Пинг проходит, машина в сети!")
                    self.txtOut.scrollToBottom()
                    self.CheckActivityProgram(self)
                    logging.basicConfig(format="%(asctime)s - %(message)s", filename='Logs.log', level=logging.INFO)
                    logging.info("Пинг проходит, машина в сети!")
                time.sleep(self.takeTime)
 
    def CheckActivityProgram(self, doneProgram):
        self.is_run_program = True
        try:
            result_process = [i for i in subprocess.check_output(
                f'tasklist /s {self.ip} /u {self.login} /p {self.password} /fi "IMAGENAME eq {str(self.comboBox.currentText())}"',
                encoding='cp866').splitlines()]
            del result_process[0]
            list_of_val = result_process[2].rsplit(" ", maxsplit=2)[-2]
            list_of_val = int(''.join(list_of_val.split()))
            if str(self.comboBox.currentText() == "notepad.exe"):
                self.memory_usage = 30
            if list_of_val < self.memory_usage:
                self.txtOut.addItem(f"{time.ctime()} Программа не запущена, либо повисла!")
                self.txtOut.scrollToBottom()
                self.lineEditWorkProgram.setStyleSheet('background: red')
                logging.basicConfig(format="%(asctime)s - %(message)s", filename='Logs.log', level=logging.INFO)
                logging.info("Программа не запущена, либо повисла!")
                self.toaster.show_toast("Внимение!", 'Проверьте работоспособность программы!', duration=2,
                                        icon_path='ico/warning.ico')
            else:
                self.txtOut.addItem(f"{time.ctime()} Программа запущенна и работает!")
                self.txtOut.scrollToBottom()
                self.lineEditWorkProgram.setStyleSheet('background: green')
                logging.basicConfig(format="%(asctime)s - %(message)s", filename='Logs.log', level=logging.INFO)
                logging.info("Программа запущенна и работает!")
 
        except:
            self.lineEditWorkProgram.setStyleSheet('background: red')
            self.txtOut.scrollToBottom()
            self.txtOut.addItem(f"{time.ctime()} Не правильный логин/пароль либо программа не запущена!")
            logging.basicConfig(format="%(asctime)s - %(message)s", filename='Logs.log', level=logging.INFO)
            logging.info("Не правильный логин/пароль либо программа не запущена!")
            self.toaster.show_toast("Внимение!", 'Проверьте работоспособность программы!', duration=2,
                                    icon_path='ico/warning.ico')
 
    def start_CheckHostIp(self):
        doneIP = threading.Event()
        self.my_threadIP = threading.Thread(target=self.CheckHostIp, args=[doneIP], daemon=True).start()
        logging.basicConfig(format="%(asctime)s - %(message)s", filename='Logs.log', level=logging.INFO)
        logging.info(f"Запуск каждые {self.takeTime} секунд.")
 
    def stop_CheckHostIp(self):
        self.is_run_ip = False
        self.lineEditPingIp.setStyleSheet('background: red')
        self.lineEditWorkProgram.setStyleSheet('background: red')
        self.buttonStart.setDisabled(False)
        self.txtOut.addItem(f"Отключено пользователем: {time.ctime()}")
        logging.basicConfig(format="%(asctime)s - %(message)s", filename='Logs.log', level=logging.INFO)
        logging.info("Отключено пользователем")
 
if __name__ == '__main__':
    app = QtWidgets.QApplication([])
    application = mywindow()
    application.show()
 
    sys.exit(app.exec_())


Тут дизайн PyQT5:
Кликните здесь для просмотра всего текста
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# -*- coding: utf-8 -*-
 
# Form implementation generated from reading ui file 'first.ui'
#
# Created by: PyQt5 UI code generator 5.15.0
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.
 
 
from PyQt5 import QtCore, QtGui, QtWidgets
 
 
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.setEnabled(True)
        MainWindow.resize(696, 515)
        MainWindow.setMinimumSize(QtCore.QSize(696, 515))
        MainWindow.setMaximumSize(QtCore.QSize(696, 515))
        MainWindow.setMouseTracking(False)
        MainWindow.setTabletTracking(False)
        MainWindow.setWindowTitle("MainWindow")
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(10, 210, 171, 51))
        self.pushButton.setObjectName("pushButton")
        self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit.setGeometry(QtCore.QRect(10, 30, 171, 20))
        self.lineEdit.setObjectName("lineEdit")
        self.listWidget = QtWidgets.QListWidget(self.centralwidget)
        self.listWidget.setGeometry(QtCore.QRect(190, 30, 501, 442))
        self.listWidget.setObjectName("listWidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(10, 10, 47, 13))
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(10, 60, 47, 13))
        self.label_2.setObjectName("label_2")
        self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_2.setGeometry(QtCore.QRect(10, 80, 171, 20))
        self.lineEdit_2.setAcceptDrops(True)
        self.lineEdit_2.setAutoFillBackground(False)
        self.lineEdit_2.setEchoMode(QtWidgets.QLineEdit.Normal)
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(10, 110, 47, 13))
        self.label_3.setObjectName("label_3")
        self.lineEdit_3 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_3.setGeometry(QtCore.QRect(10, 130, 171, 20))
        self.lineEdit_3.setFrame(True)
        self.lineEdit_3.setEchoMode(QtWidgets.QLineEdit.Password)
        self.lineEdit_3.setDragEnabled(False)
        self.lineEdit_3.setObjectName("lineEdit_3")
        self.comboBox = QtWidgets.QComboBox(self.centralwidget)
        self.comboBox.setGeometry(QtCore.QRect(10, 180, 171, 22))
        self.comboBox.setObjectName("comboBox")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(10, 270, 171, 51))
        self.pushButton_2.setObjectName("pushButton_2")
        self.label_4 = QtWidgets.QLabel(self.centralwidget)
        self.label_4.setGeometry(QtCore.QRect(10, 160, 151, 16))
        self.label_4.setObjectName("label_4")
        self.label_5 = QtWidgets.QLabel(self.centralwidget)
        self.label_5.setGeometry(QtCore.QRect(390, 10, 81, 16))
        self.label_5.setObjectName("label_5")
        self.label_6 = QtWidgets.QLabel(self.centralwidget)
        self.label_6.setGeometry(QtCore.QRect(70, 330, 61, 16))
        self.label_6.setObjectName("label_6")
        self.label_7 = QtWidgets.QLabel(self.centralwidget)
        self.label_7.setGeometry(QtCore.QRect(60, 380, 81, 16))
        self.label_7.setObjectName("label_7")
        self.lineEdit_4 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_4.setEnabled(False)
        self.lineEdit_4.setGeometry(QtCore.QRect(10, 350, 171, 20))
        self.lineEdit_4.setDragEnabled(False)
        self.lineEdit_4.setObjectName("lineEdit_4")
        self.lineEdit_5 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_5.setEnabled(False)
        self.lineEdit_5.setGeometry(QtCore.QRect(10, 400, 171, 20))
        self.lineEdit_5.setObjectName("lineEdit_5")
        self.timeEdit = QtWidgets.QTimeEdit(self.centralwidget)
        self.timeEdit.setGeometry(QtCore.QRect(10, 450, 171, 22))
        self.timeEdit.setCurrentSection(QtWidgets.QDateTimeEdit.SecondSection)
        self.timeEdit.setObjectName("timeEdit")
        self.label_8 = QtWidgets.QLabel(self.centralwidget)
        self.label_8.setGeometry(QtCore.QRect(40, 430, 111, 16))
        self.label_8.setObjectName("label_8")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 696, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
 
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
 
    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        self.pushButton.setText(_translate("MainWindow", "Start"))
        self.label.setText(_translate("MainWindow", "IP-Adress"))
        self.label_2.setText(_translate("MainWindow", "Login"))
        self.label_3.setText(_translate("MainWindow", "Passwrod"))
        self.pushButton_2.setText(_translate("MainWindow", "Stop"))
        self.label_4.setText(_translate("MainWindow", "Choose the program"))
        self.label_5.setText(_translate("MainWindow", "Process window"))
        self.label_6.setText(_translate("MainWindow", "Ping Active"))
        self.label_7.setText(_translate("MainWindow", "Program Active"))
        self.timeEdit.setDisplayFormat(_translate("MainWindow", "ss"))
        self.label_8.setText(_translate("MainWindow", "Таймер запроса (сек.)"))


Добавлено через 1 минуту
Версия python 3.7
Версия PyQt 5.15.5

Добавлено через 40 секунд
Windows 10 x64
Машина: пЫжЫк
Жену зовут: Марина
Домашний телефон: 2020327

Добавлено через 1 минуту
Бабки под унитазом.
Ключи под ковриком.
0
5042 / 1069 / 149
Регистрация: 29.01.2013
Сообщений: 6,242
02.09.2020, 09:32
Цитата Сообщение от Damenikx Посмотреть сообщение
QObject::startTimer: Timers cannot be started from another thread
да, это может быть причиной
1
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
02.09.2020, 12:35  [ТС]
Цитата Сообщение от Alli_Lupin Посмотреть сообщение
да, это может быть причиной
Хм, странно всё это, наверное придётся всё таки сделать поток через QThread

Добавлено через 2 часа 59 минут
Проблема в том, что нигде не использую этот QObject::startTimer

Добавлено через 19 секунд
Какая-то билеберда...
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
02.09.2020, 13:06
GUI делал через дизайнер? Нда..
У тебя там автосгенерированный код с QCoreApplication, а в доках написано:
The QCoreApplication class provides an event loop for Qt applications without UI.
То есть эта штука судя по всему только в консоли работает.

Добавлено через 4 минуты
P.S. Ты в дизайнере тип приложения вообще какой выбирал? Консольный что ли?
1
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
02.09.2020, 13:11
Damenikx, хоспаде, ну зачем ты дизайнер то используешь, умный же малый.

А зачем создавать кучу переменных в дизайнере, потом создавать виджет внутри, брать из него переменные, чаво?

Давай, переписывай!
1
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
02.09.2020, 14:34  [ТС]
Garry Galler, DmFat, мужчины не все сразу! Сейчас поясню за базар так сказать

Во-первых и оно же во главных! Спасибо ребят, что не кинули в трудный час!

Так-с:

Цитата Сообщение от Garry Galler Посмотреть сообщение
GUI делал через дизайнер? Нда..
Да, делал через дизайнер. Мне была интересна данная тема и я решил поэксперементировать.

Цитата Сообщение от Garry Galler Посмотреть сообщение
У тебя там автосгенерированный код с QCoreApplication
Хм, надо бы присмотреться к этому вопросу, спасибо, что подсказал!

Цитата Сообщение от Garry Galler Посмотреть сообщение
Ты в дизайнере тип приложения вообще какой выбирал? Консольный что ли?
Извините за нескромный вопрос, а где там собственно выбирать тип приложения?
Цитата Сообщение от DmFat Посмотреть сообщение

хоспаде, ну зачем ты дизайнер то используешь, умный же малый.
Ну тут бы я поспорил за чашечкой пенного по-поводу своего ума )

Цитата Сообщение от DmFat Посмотреть сообщение
А зачем создавать кучу переменных в дизайнере, потом создавать виджет внутри, брать из него переменные, чаво?
Да-да, пихал всё что видел перевызывал потом и т.д., но я сразу люблю учиться плохому
Цитата Сообщение от DmFat Посмотреть сообщение

Давай, переписывай!
Видимо придётся отказаться от дизайнера

P.S. Главное чтобы дядюшка Welemir - не увидел сей ужас.

P.S.S Попробую сделать тоже самое только без дизайнера, авось получиЦЦО
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
02.09.2020, 14:37
Damenikx, когда ручками пишешь, во первых красиво, во вторых сразу понтяно где и что может не работать.
1
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
02.09.2020, 14:45  [ТС]
DmFat, так то оно так, но очень уж хотелось ковырнуть Disigner. Вот, сижу, пробую чот переписать
0
02.09.2020, 14:55

Не по теме:

Damenikx, обычно использую его, чтобы примерно накидать макет, как все будет выглядеть, не более)

0
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
02.09.2020, 14:55  [ТС]
Сделал я маленькую програмку там кнопочка, label и окно для вывода, подрубил многопоточность ииии ничего не поменялось
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
02.09.2020, 14:56
Damenikx, Код в студию.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
02.09.2020, 14:57
Цитата Сообщение от Damenikx Посмотреть сообщение
а где там собственно выбирать тип приложения?
Где-то в мастере настройки проектов.
Здесь есть скрин:
https://ravesli.com/urok-1-vve... t-creator/
0
02.09.2020, 14:59

Не по теме:

Garry Galler, скорее всего он делал через QtDesigner который идет с PyQt5

0
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
02.09.2020, 15:24  [ТС]
Если не прописывать --noconsole - то всё работает, консоль пустая. Как только прописываешь, всё, приплыли.

Добавлено через 3 минуты
Garry Galler, да-да, именно так как сказал DmFat. Я делал через QtDesigner.

Код маленькой програмки:
Кликните здесь для просмотра всего текста
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
import sys,subprocess,time, threading, datetime
from PyQt5.QtWidgets import QApplication, QPushButton, QWidget, QLabel, QVBoxLayout, QListWidget
 
 
class MainWindow(QWidget):
    def __init__(self):
        super(MainWindow, self).__init__()
 
        self.tetleLabel = QLabel("Frist label")
        self.button = QPushButton()
        self.button.setText('qwe')
        self.txtOut = QListWidget()
 
 
        hbox = QVBoxLayout()
        hbox.addWidget(self.tetleLabel)
        hbox.addWidget(self.button)
        hbox.addWidget(self.txtOut)
        self.setLayout(hbox)
        self.button.clicked.connect(self.start_CheckHostIp)
        # self.buttonStop.clicked.connect(self.stop_CheckHostIp)
 
    def CheckHostIp(self, doneIP):
            while True:
                self.button.setDisabled(True)
                if subprocess.call(['ping', '18.12.3.36'], stdout=subprocess.DEVNULL):
                    self.txtOut.addItem(f"{datetime.datetime.now()} Конечная машина не пингуется")
                else:
                    self.txtOut.addItem(f"{datetime.datetime.now()} Пинг проходит, машина в сети!")
 
 
    def start_CheckHostIp(self):
        doneIP = threading.Event()
        self.my_threadIP = threading.Thread(target=self.CheckHostIp, args=[doneIP], daemon=True).start()
 
 
    def stop_CheckHostIp(self):
        self.is_run_ip = False
        self.buttonStart.setDisabled(False)
 
if __name__ == '__main__':
    app = QApplication(sys.argv)
    win=MainWindow()
    win.show()
    sys.exit(app.exec_())


Добавлено через 13 минут
У меня такое чувство, что это из-за того, что я использую PyQt5 и делаю многопоточность с помощью threading, а не с помощью QThreading и сигналов.

Добавлено через 6 минут
Я походу туповат, но понять так и не могу с этими сигналами, может кто подскажет? Хоть вот взять эту маленькую прогу с пингом, как там сделать вывод результата в другом потоке?
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
02.09.2020, 15:25
Damenikx, нет дело не в threading, я вот грешу на subprocess и не вижу смысла его использовать.
0
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
02.09.2020, 15:34  [ТС]
DmFat, а есть другой вариант вытянуть список процессов другого компьютера, который в сети?

Добавлено через 3 минуты
И да, без прав администратора, но с возможностью их вписать. Поэтому я и использовал tasklist
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.09.2020, 15:34
Помогаю со студенческими работами здесь

Проблема с компиляцией скрипта pyinstaller
Есть статья на хабре https://habr.com/ru/post/575100/, я попытался ее скомпилировать, но постоянно пишет что не хватает модулей. Но модули...

Проблема с создание .exe файла с использованием pyinstaller
Привет, я пытаюсь создать .exe файл, который можно передать на любой компьютер и запустить, даже на тот, в котором нет интерпретатора...

Проблема с библиотекой plyer при создании исполняемого файла с использованием pyinstaller
Добрый день. Я пытаюсь создать уведомление в Windows, используя библиотеку Plyer. Все отлично работает, когда скрипт Python запущен(.py)....

Необычная проблема с компьютером
Собрал новый компьютер. Материнская плата ASUS a320m-e Процессор AMD ryzen 3 2200g Оперативная память 8гб блок питания be quiet...

Необычная проблема с виндовс
привет всем! есть величайшая проблема. 3 дня назад на раб. стол стала выкидываться табличка ерор свхост с кодом, не убиралась ни как!...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru