Estoy tratando de configurar el atributo 'WM_CLASS' para mi aplicación Ruby tk. Lo he intentado de varias maneras, pero creo que debería funcionar así:
TkRoot.new(class: 'Test')Pero eso se equivocará con:
<internal:kernel>:18:in `class': wrong number of arguments (given 1, expected 0) (ArgumentError) from /home/ben/.gem/ruby/3.0.0/gems/tk-0.4.0/lib/tk/root.rb:40:in `block in new' from /home/ben/.gem/ruby/3.0.0/gems/tk-0.4.0/lib/tk/root.rb:36:in `each' from /home/ben/.gem/ruby/3.0.0/gems/tk-0.4.0/lib/tk/root.rb:36:in `new' from examples/form.rb:19:in `initialize' from examples/form.rb:49:in `new' from examples/form.rb:49:in `<main>'¿Cómo hacerlo correctamente?
Tk (C api) está configurando los valores de WM_CLASS en el valor de argv[0] que es lo mismo que $0 en Ruby. Entonces, para configurar WM_CLASS, uno tiene que configurar $0 antes de requerir Tk. es decir:
$0 = 'myWmClass' require 'Tk' # ... rest of the code follows here Esto establecerá el nombre de la aplicación (de WM_CLASS) en 'myWmClass' y la clase de la aplicación en 'MyWmClass' (así que aquí se fuerzan las mayúsculas). Si desea establecer el nombre de la aplicación en algo diferente, puede hacerlo a través Tk.appname('someFancyName') después de solicitar Tk. Tenga en cuenta que aunque se requiere Tk, la ventana principal parece no estar creada y, por lo tanto, la ventana principal recién creada tendrá el nombre de aplicación correcto desde el principio. También tenga en cuenta que el uso de una cadena en mayúsculas como nombre de la aplicación puede generar errores, como indica la referencia oficial del comando tk .
Para cualquier otra ventana de nivel superior (además de la ventana raíz), WM_CLASS se puede establecer en la construcción, es decir, TkToplevel.new(root, class: 'Toplevel') . Intentar hacer eso en TkRoot actualmente resultará en una excepción. (Sin embargo, parece funcionar en la API de Python).