ในฐานะผู้เรียนของ Python ฉันตัดสินใจลอง PySimpleGUI และเขียนสคริปต์ที่มีส่วนย่อยที่เกี่ยวข้องคือ
`
import PySimpleGUI as sg
....
window = sg.Window('Output Filename Creator').Layout(layout)
while True:
event, values = window.Read()
if event is None or event == "Cancel":
window.Close()
sys.exit()
else:
outfile = values['file']
window.Close()
return outfile `
ฉันใช้ Windows 10, Python 3.7, Idle 3.7 และ PySimpleGUI-3.24.0 หลังจากรันสคริปต์ที่มีข้อมูลโค้ดด้านบน (ไม่มีข้อผิดพลาดในการดำเนินการ) ฉันไปที่เชลล์ Idle แล้วลองพิมพ์ len ('1') เมื่อเข้าสู่วงเล็บเปิดข้อผิดพลาดต่อไปนี้จะถูกสร้างขึ้น:
Traceback (most recent call last):
File "C:\Users\Paul\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 332, in __del__
if self._tk.getboolean(self._tk.call("info", "exists", self._name)):
RuntimeError: main thread is not in main loop
ฉันรู้ว่า PySimpleGUI อยู่บนพื้นฐานของ tkinter แต่นั่นก็เท่าที่ความรู้ของฉันไป ฉันไม่รู้ว่าเธรดทำงานอย่างไรใน Python หรือ PySimpleGUI เชื่อมโยงกับ Tk ได้อย่างไร แต่ฉันต้องการทราบว่าข้อผิดพลาดมาจากที่ใดและฉันสามารถทำอะไรได้บ้างเพื่อหลีกเลี่ยง
อัปเดต: รหัสที่ลดลงเป็นสิ่งจำเป็นเปลือยยังคงให้ข้อผิดพลาดเดิมเมื่อปิดหน้าต่างโดยคลิกที่กากบาทที่มุมขวาบน:
def OutputFileName(default):
import PySimpleGUI as sg
layout = [
[sg.In(default, key='file', size=(70,1)),
sg.SaveAs('Browse')],
[sg.Save(), sg.Text(' '*35), sg.Cancel()]
]
window = sg.Window(' ').Layout(layout)
event, values = window.Read()
if event is None or event == "Cancel":
return
elif event == 'Save':
return values['file']
outf = OutputFileName('foo.txt')
if statement
คุณออกจากวงดังนั้นจึงจำเป็นที่จะต้องwhile True:
?