Seite 1 von 1
dynamisch buttons aus dictionary erzeugen
Verfasst: Mittwoch 30. Januar 2008, 22:28
von DocFisher
Hallo,
mal wieder hoffe ich auf Eure Hilfe!
Ich versuche schon seit Stunden dynamisch wx.Button's zu generieren.
Problemstellung:
Dict = {1:[Wert1, Wert2, ..., Wert(n-1)], 2:[Wert2_1, .....]}
Jetzt möchte ich, dass zu jedem Key in Dict ein Button in einem Panel erzeugt wird. Aber ich schaffe es einfach nicht....
Als zweites Problem ergibt sich daraus:
Dict wird via einem Dialog erweitert. Wenn das obige Problem gelöst ist, wie kann ich dann mit Klick auf den OK-Button des Dialogs das Panel "updaten"?
Google hat mich nicht viel weiter gebracht. Deswegen wende ich mich mal wieder an Euch.
Jeglich Hilfe ist willkommen,
einen schönen Abend, Doc
Verfasst: Donnerstag 31. Januar 2008, 08:15
von Nikolas
bei Tkinter gehst etwa so, wx dürfte da nicht allzu unterschiedlich sein:
Code: Alles auswählen
root = IrgendWasAlsOberChef
for key in dict:
einPanel = Panel(root, ... )
einPanel.grid(column=? row=?) # wobei dann hier die dict[key]bentzt werden können
einButton = Button(einPanel,command = dict[key][3]) # oder so
ein Button.pack()
Wenn du jetzt noch einen Button hinzufügen willst, musst du dir entweder merken, wo du die Panels hingesetzt hast und einfach noch ein weiteres erstellen, oder (unschön), du erstellst dir eine Liste der ID der Panel und zerstörst sie dann, bevor du alle neu erstellst.
Re: dynamisch buttons aus dictionary erzeugen
Verfasst: Donnerstag 31. Januar 2008, 09:32
von gerold
DocFisher hat geschrieben:Dict = {1:[Wert1, Wert2, ..., Wert(n-1)], 2:[Wert2_1, .....]}
Jetzt möchte ich, dass zu jedem Key in Dict ein Button in einem Panel erzeugt wird.
Hallo DocFisher!
Ich würde eine Liste als Behälter nehmen, denn ein Dictionary hält sich nicht an die Reihenfolge.
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
import wx
wx.SetDefaultPyEncoding("iso-8859-15")
class MyFrame(wx.Frame):
def __init__(
self, parent = None, title = "Example", size = wx.Size(550, 420)
):
wx.Frame.__init__(self, parent, -1, title, size = size)
panel = wx.Panel(self)
vbox_main = wx.BoxSizer(wx.VERTICAL)
panel.SetSizer(vbox_main)
buttons_def = [
{
"type": wx.Button, "id": -1, "label": "Button 1", "name": "btn01",
"event": wx.EVT_BUTTON, "handler": self.on_button,
},
{
"type": wx.Button, "id": -1, "label": "Button 2", "name": "btn02",
"event": wx.EVT_BUTTON, "handler": self.on_button,
},
{
"type": wx.Button, "id": -1, "label": "Button 3", "name": "btn03",
"event": wx.EVT_BUTTON, "handler": self.on_button,
},
]
self.buttons = []
for button_def in buttons_def:
btn = button_def["type"](
parent = panel,
id = button_def.get("id", -1),
label = button_def.get("label", wx.EmptyString),
name = button_def.get("name", wx.ButtonNameStr)
)
vbox_main.Add(btn)
if button_def.get("event", None):
btn.Bind(button_def["event"], button_def["handler"])
self.buttons.append(btn)
def on_button(self, event):
clicked_button = event.GetEventObject()
button_name = clicked_button.GetName()
print button_name
def main():
"""Testing"""
app = wx.PySimpleApp()
f = MyFrame()
f.Center()
f.Show()
app.MainLoop()
if __name__ == "__main__":
main()
mfg
Gerold
Verfasst: Donnerstag 31. Januar 2008, 11:27
von DocFisher
!RAWHIDE!
Ich Danke Dir, Gerold!
Und natürlich auch Dir Nikols, aber um Tkinter mache ich noch einen Bogen...
Verfasst: Sonntag 2. März 2008, 17:26
von sea-live
Guten Tag ich würde gerne das oben mit WX mal ausprobieren bisher nur tKinter
gibts da auch ne funktion mit auswahlmenüButons
Code: Alles auswählen
symbollisten = {'tecdax':tecdax, 'mdax':mdax,'cdax':cdax,'sdax':sdax,'dax30':dax30}
def auswahlbuttons(self):
for key,value in self.symbollisten.iteritems():
tlabel = tk.Label(self.auswahlframe, text='Symbol'+key+':')
tlabel.pack(side=tk.LEFT)
self.buttons.append(tlabel)
self.optionTecdax = tk.OptionMenu(self.auswahlframe, self.var_symbol,
command=self.druck,
*self.value)
self.optionTecdax.pack(side=tk.LEFT)
self.buttons.append(self.optionTecdax)
Verfasst: Sonntag 2. März 2008, 21:24
von gerold
sea-live hat geschrieben:gibts da auch ne funktion mit auswahlmenüButons
Hallo sea-live!
Suche in der wxPython-Demo nach "menu". Dort werden verschiedene Menüarten gezeigt.
mfg
Gerold
Verfasst: Dienstag 4. März 2008, 09:31
von sea-live
DANKE hat sich erledigt
Beitrag Hier
http://www.python-forum.de/topic-13759.html?highlight=
Code: Alles auswählen
self.symbollisten = {'tecdax':tecdax, 'mdax':mdax,'cdax':cdax,'sdax':sdax,'dax30':dax30}
wx.StaticText(self, -1, "Auswahl_Drop_down mit wxChoice.", (15, 10))
self.wertx=10
for key in self.symbollisten:
wx.StaticText(self, -1, key, (self.wertx, 50), (40, -1))
self.liste=self.symbollisten[key]
self.liste = wx.Choice(self, -1, (self.wertx, 70),
choices = self.liste)
self.Bind(wx.EVT_CHOICE, self.IhreWahl,self.liste)
self.wertx=self.wertx+80