Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

341
Views
Fallo de BadWindow en tkinter después de llamar a glfw.init()

Tengo el siguiente código, que funciona en Windows, pero falla en Linux con X11:

 #! /usr/bin/env python3 """Tkinter crashes on X11 when popup windows are closed after calling glfw.init() """ from sys import exit from tkinter import Tk from tkinter.messagebox import showinfo from glfw import init class MainWindow(Tk): """Main window.""" def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) if not init(): exit(2) showinfo('Close me', 'I dare you') def main(): """Run the script.""" MainWindow().mainloop() if __name__ == '__main__': main()

Después de hacer clic en Aceptar en el cuadro de mensaje en Linux/X11, el programa falla con:

 X Error of failed request: BadWindow (invalid Window parameter) Major opcode of failed request: 15 (X_QueryTree) Resource id in failed request: 0x4c0000a Serial number of failed request: 778 Current serial number in output stream: 778

Las direcciones varían después de cada ejecución, pero el error general sigue siendo el mismo.
Pude reducir el problema a la llamada de glfw.init() que da como resultado el cierre posterior de tkinter Windows para bloquear el programa. Sin embargo, esto no sucede en los sistemas Windows.

Algo de información del sistema:

 $ uname -r 5.16.16-arch1-1 $ pacman -Q xorg-server xorg-server 21.1.3-6 $ echo $XDG_SESSION_TYPE x11 $ pacman -Q glfw python-glfw glfw-x11 3.3.6-1 python-glfw 2.1.0-2

¿Por qué este programa falla en mi sistema?
¿Qué puedo hacer para que funcione como en Windows?

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

No soy un experto en esto, pero si solo desea tener un código que funcione, debe llamar a glfw.init() antes super().__init__() de esta manera:

 from tkinter import Tk from tkinter.messagebox import showinfo from glfw import init class MainWindow(Tk): """Main window.""" def __init__(self, *args, **kwargs): if not init(): exit(2) super().__init__(*args, **kwargs) showinfo('Close me', 'I dare you') def main(): """Run the script.""" MainWindow().mainloop() if __name__ == '__main__': main()

Creo que es mejor poner glfw.init() en main antes de MainWindow().mainloop() , pero quería dejar en claro que creo que el problema está directamente en super().__ini__() .

No probé ninguna función de glfw, solo verifiqué esto debido a otras preguntas sobre SO

Aquí hay algunos enlaces que puede consultar, tal vez puedan ayudar: proyecto de código togl

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!