При закрытии окна QPainter закрывается окно tkinter
Проблема в том, что при закрытии окна QPainter закрывается окно Tkinter. Как можно исправить? Пробовал в разные места поставить input - не помогло...
import tkinter as tk
from tkinter import ttk
import sys
from PyQt5.QtWidgets import QWidget, QApplication
from PyQt5.QtGui import QPainter, QColor, QPen, QBrush
from PyQt5.QtCore import Qt
root = tk.Tk()
root.title("Title")
root.geometry("780x630")
root.resizable(False, False)
main_frame = ttk.Frame(root, padding=(20, 10))
main_frame.grid(sticky="NSEW")
entry_value = tk.StringVar()
result_value = tk.StringVar(value="Результат")
def click_btn():
number = float(entry_value.get())
result = number * 1
result_value.set(f"{result}")
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(200, 100, 600, 550)
self.show()
def paintEvent(self, e):
qp = QPainter()
qp.begin(self)
self.recta(qp)
qp.end()
def recta(self, qp):
qp.setPen(QPen(Qt.black, 2, Qt.SolidLine))
qp.setBrush(QColor('white'))
qp.drawRect(210,300,180,200)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
ex.show()
sys.exit(app.exec_())
variant_var = tk.IntVar()
display_result = ttk.Label(main_frame, text="Результат", font=("Arial", 10), textvariable=result_value, padding=(0, 7, 0, 7))
header = ttk.Label(main_frame, text="label", font=("Arial, 15 bold"), padding=(0, 0, 0, 10))
enter_lable = ttk.Label(main_frame, text="input:", font=("Arial, 10"))
entry_data = ttk.Entry(main_frame, width=20, textvariable=entry_value)
btn = ttk.Button(main_frame, text="button", width=20, command=click_btn)
r1 = ttk.Radiobutton(main_frame, text="radio1", padding=(0, 0, 0, 20), variable=variant_var, value=1)
r2 = ttk.Radiobutton(main_frame, text="radio2", padding=(0, 0, 0, 20), variable=variant_var, value=2)
r3 = ttk.Radiobutton(main_frame, text="radio3", padding=(0, 0, 0, 20),variable=variant_var, value=3)
header.grid(column=1)
r1.grid(row=1, column=0)
r2.grid(row=1, column=1)
r3.grid(row=1, column=2)
enter_lable.grid(sticky="W", pady=5)
entry_data.grid(row=2, column=1, sticky="EW", pady=5)
btn.grid(row=3, column=1, ipady=2)
display_result.grid(row=5, column=1)
root.mainloop()
Источник: Stack Overflow на русском