Tabelle in wxPython

Plattformunabhängige GUIs mit wxWidgets.
Antworten
olgun
User
Beiträge: 5
Registriert: Samstag 24. Januar 2009, 15:42

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
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Schau Dir mal in der wxPython-Demo die Beispiele zu Grid an.
MfG
HWK
olgun
User
Beiträge: 5
Registriert: Samstag 24. Januar 2009, 15:42

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.
olgun
User
Beiträge: 5
Registriert: Samstag 24. Januar 2009, 15:42

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
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?
olgun
User
Beiträge: 5
Registriert: Samstag 24. Januar 2009, 15:42

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]
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

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
olgun
User
Beiträge: 5
Registriert: Samstag 24. Januar 2009, 15:42

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
Antworten