Windows 7
При первом запуске все отрабатывает ок, при повторном запуске программа вылетает.
Вот еще вариант но проблема та же:
При первом запуске все отрабатывает ок, при повторном запуске программа вылетает.
Python:
import tkinter as tk
from PyQt5.QtWebEngineWidgets import *
from PyQt5 import QtWidgets
from PyQt5 import QtCore
from PyQt5.QtCore import *
import sys
import threading
class Main(tk.Frame):
def __init__(self, root):
super().__init__(root)
self.init_main()
def init_main(self):
self.label = tk.Label(self, text='После первого нажатия на кнопку все отрабатывает,\n'
' потом закрываем окно \n'
'и повторно жмем кнопку и программа рушится\n')
self.label.pack(side=tk.TOP)
self.btn = tk.Button(self, text='Нажми меня', command=self.open_new_child)
self.btn.pack(side=tk.TOP)
def thread(my_func):
def wrapper(*args, **kwargs):
my_thread = threading.Thread(target=my_func, args=args, kwargs=kwargs)
my_thread.start()
return wrapper
@thread
def open_new_child(self):
self.url = 'https://www.example.com'
self.app = QtWidgets.QApplication(sys.argv)
self.centralwidget = QtWidgets.QWidget()
self.centralwidget.setObjectName("centralwidget")
self.centralwidget.setGeometry(QtCore.QRect(150, 50, 700, 600))
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit.setGeometry(QtCore.QRect(70, 10, 600, 20))
self.lineEdit.setObjectName("lineEdit")
self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_2.setGeometry(QtCore.QRect(70, 40, 600, 20))
self.lineEdit_2.setObjectName("lineEdit_2")
self.frame = QtWidgets.QFrame(self.centralwidget)
self.frame.setGeometry(QtCore.QRect(70, 70, 600, 371))
self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame.setObjectName("frame")
self.web = QWebEngineView(self.frame)
# self.web.setWindowTitle(self.title)
self.web.load(QUrl(self.url))
self.web.resize(600, 550)
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(40, 10, 21, 16))
self.label.setObjectName("label")
self.label_2 = QtWidgets.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(30, 40, 31, 16))
self.label_2.setObjectName("label_2")
self.label.setText("От:")
self.label_2.setText("Тема:")
self.centralwidget.show()
self.app.exec()
if __name__ == "__main__":
root = tk.Tk()
app = Main(root)
app.pack()
root.geometry("400x200+100+100")
root.resizable(True, True)
root.mainloop()
Вот еще вариант но проблема та же:
Код:
import tkinter as tk
from PyQt5.QtWebEngineWidgets import *
from PyQt5 import QtWidgets
from PyQt5 import QtCore
from PyQt5.QtCore import *
import sys
class Main(tk.Frame):
def __init__(self, root):
super().__init__(root)
self.init_main()
def init_main(self):
self.label = tk.Label(self, text='После первого нажатия на кнопку все отрабатывает,\n'
' потом закрываем окно \n'
'и повторно жмем кнопку и программа рушится\n')
self.label.pack(side=tk.TOP)
self.btn = tk.Button(self, text='Нажми меня', command=self.open_read_mail)
self.btn.pack(side=tk.TOP)
def open_read_mail(self):
# self.filepath = 'https://www.example.com' # 'file:///__Страшно_горят_цены_в_21vek___/index.html'
# web_text = self.filepath
web = Web() # web_text
web.open()
class Web:
def __init__(self, url='https://www.example.com', title='Входящее сообщение'):
self.title = title
self.url = url
def init_child(self):
self.app = QtWidgets.QApplication(sys.argv)
self.centralwidget = QtWidgets.QWidget()
self.centralwidget.setObjectName("centralwidget")
self.centralwidget.setGeometry(QtCore.QRect(150, 50, 700, 600))
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit.setGeometry(QtCore.QRect(70, 10, 600, 20))
self.lineEdit.setObjectName("lineEdit")
self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_2.setGeometry(QtCore.QRect(70, 40, 600, 20))
self.lineEdit_2.setObjectName("lineEdit_2")
self.frame = QtWidgets.QFrame(self.centralwidget)
self.frame.setGeometry(QtCore.QRect(70, 70, 600, 371))
self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame.setObjectName("frame")
self.web = QWebEngineView(self.frame)
self.web.setWindowTitle(self.title)
self.web.load(QUrl(self.url))
self.web.resize(600, 550)
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(40, 10, 21, 16))
self.label.setObjectName("label")
self.label_2 = QtWidgets.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(30, 40, 31, 16))
self.label_2.setObjectName("label_2")
self.label.setText("От:")
self.label_2.setText("Тема:")
qbtn = QtWidgets.QPushButton('Quit', self.centralwidget)
qbtn.clicked.connect(self.close_window)
qbtn.resize(qbtn.sizeHint())
qbtn.move(1, 60)
def close_window(self):
self.centralwidget.close()
#sys.exit(0)
def open(self):
self.init_child()
self.centralwidget.show()
self.app.exec()
#sys.exit()
if __name__ == "__main__":
root = tk.Tk()
app = Main(root)
app.pack()
root.geometry("400x200+100+100")
root.resizable(True, True)
root.mainloop()