Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » PyQt5 Pyinstaller Созданный .exe неправильно работает [RSS Feed]

#1 Апрель 1, 2021 15:05:12

lomaku
Зарегистрирован: 2021-04-01
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt5 Pyinstaller Созданный .exe неправильно работает

Пишу программу по проверке знаний ударений. Файл в интерпретаторе выполняется правильно, но после превращения его в .ехе файл при помощи pyinstaller очень редко, через раз стала выполняться основная функция MakeButton, перестали создаваться кнопки. Скажите пожалуйста, с чем это может быть связано. Заранее спасибо.

 from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QButtonGroup
import sys
from random import randrange
from mnwind import Ui_MainWindow
from emhwind import Ui_EmhWindow
from statwind import Ui_StatWindow
app = QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
EmhWindow = QtWidgets.QMainWindow()
StatWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
emh = Ui_EmhWindow()
st = Ui_StatWindow()
ui.setupUi(MainWindow)
emh.setupUi(EmhWindow)
st.setupUi(StatWindow)
MainWindow.show()
btn_grp = QButtonGroup()
all_count = 0
cor_count = 0
def open_file():
    with open('emphasis.txt', encoding='utf-8') as EMH:
        rand = randrange(286)
        for i in range(rand - 1):
            EMH.readline()
        word = EMH.readline()
    return word
def go_further():
        emh.cor_lbl.hide()
        emh.incor_lbl.hide()
        emh.go_btn.hide()
        DeleteButton(emh.word_lay)
        word = open_file()
        MakeButton(emh.word_lay, word)
emh.go_btn.clicked.connect(go_further)
def n_evernoe(self):
    global all_count
    all_count += 1
    emh.cor_lbl.hide()
    emh.incor_lbl.show()
    emh.go_btn.show()
    btn_grp.button(54).setStyleSheet("border: none;"
    			"color: green;"
    			"font-weight: bold;"
    			"font: 75 20pt")
    for x in btn_grp.buttons():
        x.setEnabled(False)
def v_ernoe(self):
    global all_count
    all_count += 1
    global cor_count
    cor_count += 1
    emh.incor_lbl.hide()
    emh.cor_lbl.show()
    emh.go_btn.show()
    btn_grp.button(54).setStyleSheet("border: none;"
    			"color: green;"
    			"font-weight: bold;"
    			"font: 75 20pt")
    for x in btn_grp.buttons():
        x.setEnabled(False)
def MakeButton(lay, word):
	for i in range(len(word)):
		btn = QtWidgets.QPushButton('{}'.format(word[i].lower()))
		if word[i] in ["А", "У", "Е", "Ы", "О", "Э", "Я", "И", "Ю"]:
			btn.setStyleSheet("border: none;"
				"color: red;"
				"font-weight: bold;"
				"font: 75 20pt")
			btn.clicked.connect(v_ernoe)
			btn_grp.addButton(btn)
			btn_grp.setId(btn, 54)
		elif word[i] in ["а", "у", "е", "ы", "о", "э", "я", "и", "ю"]:
			btn.setStyleSheet("border: none;"
				"color: red;"
				"font-weight: bold;"
				"font: 75 20pt")
			btn.clicked.connect(n_evernoe)
			btn_grp.addButton(btn)
		else:
			btn.setStyleSheet("border: none;"
				"color: rgb(32, 34, 50);"
				"font-weight: bold;"
				"font: 75 20pt")
			btn_grp.addButton(btn)
		lay.addWidget(btn)
def DeleteButton(lay):
    for i in reversed(range(lay.count())): 
    	lay.itemAt(i).widget().setParent(None)
def go_emh():
	EmhWindow.show()
	MainWindow.close()
	emh.cor_lbl.hide()
	emh.incor_lbl.hide()
	emh.go_btn.hide()
	word = open_file()
	MakeButton(emh.word_lay, word)
ui.start_btn.clicked.connect(go_emh)
def go_stat():
	MainWindow.close()
	StatWindow.show()
	if all_count != 0:
		st.all_lbl.setText(str(all_count))
		st.corr_lbl.setText(str(cor_count))
		proc = round(cor_count / all_count * 100)
		st.proc_lbl.setText(str(proc) + '%')
		if proc <= 50:
			st.mark_lbl.setText('2')
		elif proc > 50 and proc < 70:
			st.mark_lbl.setText('3')
		elif proc >= 70 and proc < 90:
			st.mark_lbl.setText('4')
		elif proc >= 90:
			st.mark_lbl.setText('5')
ui.stats_btn.clicked.connect(go_stat)
def clear_stat():
	global all_count
	global cor_count
	all_count = 0
	cor_count = 0
	st.all_lbl.setText('')
	st.corr_lbl.setText('')
	st.proc_lbl.setText('')
	st.mark_lbl.setText('')
st.clear_btn.clicked.connect(clear_stat)
def go_main():
	if EmhWindow.close():
		MainWindow.show()
		EmhWindow.close()
		DeleteButton(emh.word_lay)
		emh.cor_lbl.hide()
		emh.incor_lbl.hide()
		emh.go_btn.hide()
	if StatWindow.close():
		StatWindow.close()
		MainWindow.show()
emh.ex_btn.clicked.connect(go_main)
st.exi_btn.clicked.connect(go_main)
ui.exit_btn.clicked.connect(sys.exit)
sys.exit(app.exec_())

Отредактировано lomaku (Апрель 1, 2021 15:05:51)

Офлайн

#2 Апрель 2, 2021 08:55:49

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

PyQt5 Pyinstaller Созданный .exe неправильно работает

lomaku
Скажите пожалуйста, с чем это может быть связано
С тем что вы сделали exe. Этого делать не следовало. Если интересно почему не следовало, поищите на форуме. Это не раз разжевывали новичкам.



Офлайн

#3 Апрель 2, 2021 09:42:56

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

PyQt5 Pyinstaller Созданный .exe неправильно работает

lomaku Это случается достаточно часто при сборке пайинсталлером, сх_фризи или нуиткой, что в интерпретаторе все работает,а в упакованом виде нет. Причины банальны, сборщик пропустил/не нашел гдето зависимость, не добавил нужный модуль и вы ловите ексепшин(фикситься так же просто, принудительно прописываете этот модуль). И если в интерпретаторе вы можете увидеть исключение в консоли, то в собраном екзешнике вам нужно сделать логирование всех ошибок в файл. Вернее это нужно сделать в вашей программе которую вы упаковываете пайинсталлером. Или хотябы собирать екзешник не синглвинловс, а с консолью. И смотрите чего там в супе не хватает.



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

Отредактировано PEHDOM (Апрель 2, 2021 09:44:23)

Офлайн

#4 Апрель 2, 2021 12:19:52

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

PyQt5 Pyinstaller Созданный .exe неправильно работает

PEHDOM
то в собраном екзешнике вам нужно сделать логирование всех ошибок в файл
сх_фризи обычно пишет чего не хватает



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Офлайн

#5 Апрель 2, 2021 12:28:48

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

PyQt5 Pyinstaller Созданный .exe неправильно работает

AD0DE412
сх_фризи обычно пишет чего не хватает
Моет быть, я им особо не пользовался, так как он тянет много чего лишнего, и итоговый файл может выйти в пару раз больше чем у пайинсталлера. Обычно пайинстеллер в консоли тоже все пишет, но люди часто собирают в синглвиндовс, тоесть без доп окна консоли.



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

Отредактировано PEHDOM (Апрель 2, 2021 12:30:01)

Офлайн

#6 Апрель 2, 2021 18:40:38

lomaku
Зарегистрирован: 2021-04-01
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt5 Pyinstaller Созданный .exe неправильно работает

PEHDOM
Или хотябы собирать екзешник не синглвинловс, а с консолью. И смотрите чего там в супе не хватает.
Я пробовал так собирать, но он ни единой ошибки не выдал. Чисто и гладко.

Офлайн

#7 Апрель 2, 2021 19:51:13

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

PyQt5 Pyinstaller Созданный .exe неправильно работает

lomaku
Я пробовал так собирать, но он ни единой ошибки не выдал. Чисто и гладко.
Значит настраивайте логирование ошибок в файл. Гдето чтото вылазит. Пайинсталлер просто создает самораспаковывающийся архив с пайтоном и вашим скриптом внутри. Ничего более.



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

Отредактировано PEHDOM (Апрель 2, 2021 19:51:37)

Офлайн

  • Начало
  • » GUI
  • » PyQt5 Pyinstaller Созданный .exe неправильно работает[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version