widgets standard libreria library instalar example python wxpython tabs tkinter

standard - tkinter python example



Widget portátil en Tkinter (5)

Habiendo jugado un poco con Tkinter y wxPython, me gusta Tkinter mucho mejor en términos de cuán limpio se ve mi código fuente. Sin embargo, no parece tener tantas características; en particular, no tiene pestañas (como en las pestañas en la parte superior de una ventana de Firefox).

Un poco de Google en el tema ofrece algunas sugerencias. Hay una entrada de libro de cocina con una clase que te permite usar pestañas, pero es muy primitiva. También hay megawidgets de Python en SourceForge, aunque esto parece muy antiguo y me dio errores durante la instalación.

¿Alguien tiene experiencia haciendo GUIs con pestañas en Tkinter? ¿Que usaste? ¿O simplemente ocurre que cualquiera que necesite componentes de ventanas más potentes tiene que usar wxPython?


"¿O simplemente sucede que cualquiera que necesite componentes de ventanas más potentes tiene que usar wxPython?"
Respuesta corta: sí.

Respuesta larga: Puede llevar algo de práctica que su código wxPython se sienta "limpio", pero es más agradable y mucho más potente que Tkinter. También obtendrá un mejor soporte, ya que más personas lo usan en estos días.


¿Qué problemas tuviste con pmw? Es viejo, sí, pero es puro pitón, así que debería funcionar.

Tenga en cuenta que Tix no funciona con py2exe, si eso es un problema para usted.


Si bien puede que no lo ayude en este momento, tk 8.5 viene con un conjunto extendido de widgets. Este conjunto ampliado está disponible con tk 8.4 por medio de una extensión conocida como "mosaico". Incluido en el conjunto extendido de widgets es un widget de bloc de notas. Desafortunadamente, en este momento, Tkinter usa por defecto una versión bastante anterior de Tk que no viene con estos widgets.

Se han realizado esfuerzos para que Tkinter tenga acceso a las fichas. Consulte http://tkinter.unpythonic.net/wiki/TileWrapper . Para otro esfuerzo similar, vea http://pypi.python.org/pypi/pyttk . Además, para conocer el aspecto de estos widgets (en Ruby, Perl y Tcl), consulte http://www.tkdocs.com/ .

Tk 8.5 es una gran mejora sobre el stock Tk. Presenta varios widgets nuevos, widgets nativos y un motor de tematización. Esperemos que esté disponible por defecto en Tkinter algún día pronto. Lástima que el mundo de Python va por detrás de otros idiomas.

actualización: las últimas versiones de Python ahora incluyen soporte para los widgets temáticos listos para usar. _


Si alguien sigue mirando, tengo esto funcionando como Tab en tkinter. Juegue con el código para que funcione de la manera que desee (por ejemplo, puede agregar un botón para agregar una nueva pestaña):

from tkinter import * class Tabs(Frame): """Tabs for testgen output""" def __init__(self, parent): super(Tabs, self).__init__() self.parent = parent self.columnconfigure(10, weight=1) self.rowconfigure(3, weight=1) self.curtab = None self.tabs = {} self.addTab() self.pack(fill=BOTH, expand=1, padx=5, pady=5) def addTab(self): tabslen = len(self.tabs) if tabslen < 10: tab = {} btn = Button(self, text="Tab "+str(tabslen), command=lambda: self.raiseTab(tabslen)) btn.grid(row=0, column=tabslen, sticky=W+E) textbox = Text(self.parent) textbox.grid(row=1, column=0, columnspan=10, rowspan=2, sticky=W+E+N+S, in_=self) # Y axis scroll bar scrollby = Scrollbar(self, command=textbox.yview) scrollby.grid(row=7, column=5, rowspan=2, columnspan=1, sticky=N+S+E) textbox[''yscrollcommand''] = scrollby.set tab[''id'']=tabslen tab[''btn'']=btn tab[''txtbx'']=textbox self.tabs[tabslen] = tab self.raiseTab(tabslen) def raiseTab(self, tabid): print(tabid) print("curtab"+str(self.curtab)) if self.curtab!= None and self.curtab != tabid and len(self.tabs)>1: self.tabs[tabid][''txtbx''].lift(self) self.tabs[self.curtab][''txtbx''].lower(self) self.curtab = tabid def main(): root = Tk() root.geometry("600x450+300+300") t = Tabs(root) t.addTab() root.mainloop() if __name__ == ''__main__'': main()


En las versiones recientes de Python (> 2.7), puede usar el módulo ttk , que proporciona acceso al conjunto de widgets temáticos Tk , que se introdujo en Tk 8.5 .

A continuación, le mostramos cómo importar ttk en Python 2:

import ttk help(ttk.Notebook)

En Python 3, el módulo ttk viene con las distribuciones estándar como un submódulo de tkinter .

Aquí hay un ejemplo de trabajo simple basado en un ejemplo del TkDocs web TkDocs :

from tkinter import ttk import tkinter as tk from tkinter.scrolledtext import ScrolledText def demo(): root = tk.Tk() root.title("ttk.Notebook") nb = ttk.Notebook(root) # adding Frames as pages for the ttk.Notebook # first page, which would get widgets gridded into it page1 = ttk.Frame(nb) # second page page2 = ttk.Frame(nb) text = ScrolledText(page2) text.pack(expand=1, fill="both") nb.add(page1, text=''One'') nb.add(page2, text=''Two'') nb.pack(expand=1, fill="both") root.mainloop() if __name__ == "__main__": demo()

Otra alternativa es usar el widget de tkinter.tix biblioteca tkinter.tix . Para usar tkinter.tix , debe tener los widgets Tix instalados, generalmente junto con la instalación de los widgets Tk . Para probar su instalación, intente lo siguiente:

from tkinter import tix root = tix.Tk() root.tk.eval(''package require Tix'')

Para obtener más información, consulte esta página web en el sitio web de PSF.

Tenga en cuenta que tix es bastante antiguo y no está bien respaldado, por lo que su mejor opción podría ser ir a ttk.Notebook .