Форум сайта python.su
Пишу программу по проверке знаний ударений. Файл в интерпретаторе выполняется правильно, но после превращения его в .ехе файл при помощи 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)
Офлайн
lomakuС тем что вы сделали exe. Этого делать не следовало. Если интересно почему не следовало, поищите на форуме. Это не раз разжевывали новичкам.
Скажите пожалуйста, с чем это может быть связано
Офлайн
lomaku Это случается достаточно часто при сборке пайинсталлером, сх_фризи или нуиткой, что в интерпретаторе все работает,а в упакованом виде нет. Причины банальны, сборщик пропустил/не нашел гдето зависимость, не добавил нужный модуль и вы ловите ексепшин(фикситься так же просто, принудительно прописываете этот модуль). И если в интерпретаторе вы можете увидеть исключение в консоли, то в собраном екзешнике вам нужно сделать логирование всех ошибок в файл. Вернее это нужно сделать в вашей программе которую вы упаковываете пайинсталлером. Или хотябы собирать екзешник не синглвинловс, а с консолью. И смотрите чего там в супе не хватает.
[code python][/code]
Отредактировано PEHDOM (Апрель 2, 2021 09:44:23)
Офлайн
PEHDOMсх_фризи обычно пишет чего не хватает
то в собраном екзешнике вам нужно сделать логирование всех ошибок в файл
Офлайн
AD0DE412Моет быть, я им особо не пользовался, так как он тянет много чего лишнего, и итоговый файл может выйти в пару раз больше чем у пайинсталлера. Обычно пайинстеллер в консоли тоже все пишет, но люди часто собирают в синглвиндовс, тоесть без доп окна консоли.
сх_фризи обычно пишет чего не хватает
[code python][/code]
Отредактировано PEHDOM (Апрель 2, 2021 12:30:01)
Офлайн
PEHDOMЯ пробовал так собирать, но он ни единой ошибки не выдал. Чисто и гладко.
Или хотябы собирать екзешник не синглвинловс, а с консолью. И смотрите чего там в супе не хватает.
Офлайн
lomakuЗначит настраивайте логирование ошибок в файл. Гдето чтото вылазит. Пайинсталлер просто создает самораспаковывающийся архив с пайтоном и вашим скриптом внутри. Ничего более.
Я пробовал так собирать, но он ни единой ошибки не выдал. Чисто и гладко.
[code python][/code]
Отредактировано PEHDOM (Апрель 2, 2021 19:51:37)
Офлайн