Seite 1 von 1
Tabelle in wxPython
Verfasst: Samstag 24. Januar 2009, 15:53
von olgun
Hallo erst mal zusammen,
ich schreibe grade ein Program, in dem ich ein Tabelle machen möchte.
Wenn ich in die Tabelle irgendwas eintippe soll auf der anderen Seite durch Eingabe in der Tabelle, eine Zeichnung gezeichnet werden, das ist nicht weiter schlimm, mein Problem ist es überhaupt einen editierbaren Tabelle zu machen. Habe massenhafte Quellcodes gefunden die leider nicht durchschaubar bzw. nicht verständlich sind.
Ich würde mich freuen wenn ihr mir weiter helfen könntet.
Mfg
Olgun
Verfasst: Samstag 24. Januar 2009, 16:11
von HWK
Schau Dir mal in der wxPython-Demo die Beispiele zu Grid an.
MfG
HWK
Noch ne frage
Verfasst: Samstag 24. Januar 2009, 23:46
von olgun
Vielen dank für deine hilfe,
ich habe bei den Demos dieses Grid angesehen aber ich wusste nicht was ich genau aus diesem Quellcode entnehmen soll, dass liegt glaube ich da dran das ich nocht ein Python anfänger bin.
vergessen
Verfasst: Samstag 24. Januar 2009, 23:57
von olgun
Was ich noch vergessen hatte zu erwähnen, ich wollte das mit listctrl_edit machen.
Ist da schon ein großer unterschied zwischen grid und listctrl_edit
Verfasst: Sonntag 25. Januar 2009, 09:05
von BlackJack
@olgun: Dem Quelltext der Demo solltest Du entnehmen, wie so ein `Grid` im Einsatz aussieht. Gilt analog zum `ListCtrl`. Zusätzlich zur Dokumentation von `wx` und den entsprechenden Widgets.
IMHO sind Pythonkenntnisse, inklusive Objektorientierung, Voraussetzung bevor man sich an GUI-Programmierung in Python macht. Und natürlich auch die Grundlagen von wxPython bevor man in komplexere Widgets wie Listen und Tabellen einsteigt. Wie sieht's denn da aus?
Programteile zusammen setzen
Verfasst: Montag 26. Januar 2009, 17:59
von olgun
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
import wx
wx.SetDefaultPyEncoding("iso-8859-15")
#white = (255, 255, 255)
class UmlD(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1, 'Organigram', size=(800,550))
self.panel = wx.Panel(self, -1)
self.SetBackgroundColour("white")
menubar = wx.MenuBar()
#------------------------------------------------------------------------------------------------------------#
file = wx.Menu()
new = wx.MenuItem(file, 1, '&Neu')
new.SetBitmap(wx.Bitmap('new.png'))
file.AppendItem(new)
offnen = wx.MenuItem(file, 2, u'&Öffnen')
offnen.SetBitmap(wx.Bitmap('open.png'))
file.AppendItem(offnen)
speichern = wx.MenuItem(file, 3, '&Speichern')
speichern.SetBitmap(wx.Bitmap('save.png'))
file.AppendItem(speichern)
file.AppendSeparator()
quit = wx.MenuItem(file, 4, '&Beenden')
quit.SetBitmap(wx.Bitmap('quit.png'))
file.AppendItem(quit)
self.Bind(wx.EVT_MENU, self.OnQuit, id=4)
#------------------------------------------------------------------------------------------------------------#
bearbeiten = wx.Menu()
andern = wx.MenuItem(bearbeiten, 5, '&Ändern')
#andern.SetBitmap(wx.Bitmap('edit.png'))
bearbeiten.AppendItem(andern)
erase = wx.MenuItem(file, 6, '&Löschen')
#erase.SetBitmap(wx.Bitmap('erase.png'))
bearbeiten.AppendItem(erase)
#------------------------------------------------------------------------------------------------------------#
einfugen = wx.Menu()
klasse = wx.MenuItem(einfugen, 7, '&Neu')
#klasse.SetBitmap(wx.Bitmap('linie.png'))
einfugen.AppendItem(klasse)
#------------------------------------------------------------------------------------------------------------#
menubar.Append(file, '&Datei')
self.SetMenuBar(menubar)
self.toolbar1 = wx.ToolBar(self.panel, -1)
self.toolbar1.AddLabelTool(1, '', wx.Bitmap('new.png'))
self.toolbar1.AddLabelTool(2, '', wx.Bitmap('open.png'))
self.toolbar1.AddLabelTool(3, '', wx.Bitmap('save.png'))
self.toolbar1.AddSeparator()
self.toolbar1.Realize()
self.Centre()
self.Show(True)
def OnQuit(self, event):
self.Close()
if __name__ == "__main__":
app = wx.App()
UmlD()
app.MainLoop()
Das ist einfach mein Panel mit einer Toolbar.
import wx
import wx.grid as gridlib
#---------------------------------------------------------------------------
class NewEnterHandlingGrid(gridlib.Grid):
def __init__(self, parent, log):
gridlib.Grid.__init__(self, parent, -1)
self.log = log
self.CreateGrid(10, 6)
self.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
def OnKeyDown(self, evt):
if evt.GetKeyCode() != wx.WXK_RETURN:
evt.Skip()
return
if evt.ControlDown(): # the edit control needs this key
evt.Skip()
return
self.DisableCellEditControl()
success = self.MoveCursorRight(evt.ShiftDown())
if not success:
newRow = self.GetGridCursorRow() + 1
if newRow < self.GetTable().GetNumberRows():
self.SetGridCursor(newRow, 0)
self.MakeCellVisible(newRow, 0)
else:
# this would be a good place to add a new row if your app
# needs to do that
pass
#---------------------------------------------------------------------------
class TestFrame(wx.Frame):
def __init__(self, parent, log):
wx.Frame.__init__(self, parent, -1, "Simple Grid Demo", size=(640,480))
grid = NewEnterHandlingGrid(self, log)
#---------------------------------------------------------------------------
if __name__ == '__main__':
import sys
app = wx.PySimpleApp()
frame = TestFrame(None, sys.stdout)
frame.Show(True)
app.MainLoop()
#---------------------------------------------------------------------------
Und das ist die Tabelle.
Mein Problem: Das alles unter einem panel zusammenfassen[/code]
Verfasst: Dienstag 27. Januar 2009, 13:30
von HWK
Einfacher wäre es wohl, es in einem Frame zu lassen. Wenn es denn aber unbedingt ein Panel sein muss, dann mit Sizern, z.B. so:
Code: Alles auswählen
class TestFrame(wx.Frame):
def __init__(self, parent, log):
wx.Frame.__init__(self, parent, -1, "Simple Grid Demo", size=(640,480))
panel = wx.Panel(self, -1)
sizer = wx.BoxSizer(wx.VERTICAL)
grid = NewEnterHandlingGrid(panel, log)
sizer.Add(grid, 0)
sizer.Fit(panel)
panel.SetSizer(sizer)
MfG
HWK
Clear in einer Tabelle
Verfasst: Dienstag 27. Januar 2009, 15:28
von olgun
Hi brauche wieder mal eure hilfe!
Es geht da drum, ich hab eine Tabelle und dazu habe ich mehrere buttons gemacht, eine davon ist der button clear.
Leider weiß ich nicht wie ich es hinkriege dass die list geleert wird wenn ich auf das Clear button klicke.
Ich bdeanke mich für eure hilfe im voraus