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
dynamisch buttons aus dictionary erzeugen
-
- User
- Beiträge: 102
- Registriert: Dienstag 25. Dezember 2007, 22:53
- Wohnort: Freiburg im Breisgau
bei Tkinter gehst etwa so, wx dürfte da nicht allzu unterschiedlich sein:
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.
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()
Erwarte das Beste und sei auf das Schlimmste vorbereitet.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo DocFisher!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.
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()
Gerold

http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Guten Tag ich würde gerne das oben mit WX mal ausprobieren bisher nur tKinter
gibts da auch ne funktion mit auswahlmenüButons
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)
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo sea-live!sea-live hat geschrieben:gibts da auch ne funktion mit auswahlmenüButons
Suche in der wxPython-Demo nach "menu". Dort werden verschiedene Menüarten gezeigt.
mfg
Gerold

http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
DANKE hat sich erledigt
Beitrag Hier http://www.python-forum.de/topic-13759.html?highlight=
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