ich hoffe es ist hier wieder jemand so freundlich und hilft mir!!!
Ich habe bisher folgenden Code geschrieben bzw. kopiert:
1. Applikation mit dem Namen 'run.py':
Code: Alles auswählen
import wx
import sys, os
assertMode = wx.PYAPP_ASSERT_EXCEPTION
#----------------------------------------------------------------------------
class Log:
def WriteText(self, text):
if text[-1:] == '\n':
text = text[:-1]
wx.LogMessage(text)
write = WriteText
class RunDemoApp(wx.App):
def __init__(self, name, module, useShell):
self.name = name
self.demoModule = module
self.useShell = useShell
wx.App.__init__(self, redirect=False)
def OnInit(self):
wx.Log_SetActiveTarget(wx.LogStderr())
self.SetAssertMode(assertMode)
frame = wx.Frame(None, -1, "RunDemo: " + self.name, pos=(50,50),
size=(800,600), style=wx.DEFAULT_FRAME_STYLE)
frame.CreateStatusBar()
menuBar = wx.MenuBar()
menu = wx.Menu()
item = menu.Append(-1, "E&xit\tAlt-X", "Exit demo")
self.Bind(wx.EVT_MENU, self.OnExitApp, item)
menuBar.Append(menu, "&File")
ns = {}
ns['wx'] = wx
ns['app'] = self
ns['module'] = self.demoModule
ns['frame'] = frame
frame.SetMenuBar(menuBar)
frame.Show(True)
frame.Bind(wx.EVT_CLOSE, self.OnCloseFrame)
win = self.demoModule.runTest(frame, frame, Log())
# a window will be returned if the demo does not create
# its own top-level window
if win:
# so set the frame to a good size for showing stuff
frame.SetSize((640, 480))
win.SetFocus()
self.window = win
ns['win'] = win
frect = frame.GetRect()
else:
# It was probably a dialog or something that is already
# gone, so we're done.
frame.Destroy()
return True
self.SetTopWindow(frame)
self.frame = frame
#wx.Log_SetActiveTarget(wx.LogStderr())
#wx.Log_SetTraceMask(wx.TraceMessages)
if self.useShell:
# Make a PyShell window, and position it below our test window
from wx import py
shell = py.shell.ShellFrame(None, locals=ns)
frect.OffsetXY(0, frect.height)
frect.height = 400
shell.SetRect(frect)
shell.Show()
# Hook the close event of the test window so that we close
# the shell at the same time
def CloseShell(evt):
if shell:
shell.Close()
evt.Skip()
frame.Bind(wx.EVT_CLOSE, CloseShell)
return True
def OnExitApp(self, evt):
self.frame.Close(True)
def OnCloseFrame(self, evt):
if hasattr(self, "window") and hasattr(self.window, "ShutdownDemo"):
self.window.ShutdownDemo()
evt.Skip()
#----------------------------------------------------------------------------
def main(argv):
useShell = False
for x in range(len(sys.argv)):
if sys.argv[x] in ['--shell', '-shell', '-s']:
useShell = True
print sys.argv[x]
del sys.argv[x]
break
if len(argv) < 2:
print "Please specify a demo module name on the command-line"
raise SystemExit
name, ext = os.path.splitext(argv[1])
module = __import__(name)
app = RunDemoApp(name, module, useShell)
app.MainLoop()
if __name__ == "__main__":
main(sys.argv)
Code: Alles auswählen
import wx
import wx.lib.scrolledpanel as scrolled
import wx.grid
#----------------------------------------------------------------------
class PanelTabelle(wx.Panel):
def __init__(self, parent, id, size, style, name, sizer,i,j):
self.i=i
self.j=j
self.parent=parent
self.name=name
if self.name=='test_0':
self.name='quasi-static'
self.gridname=sizer
#print self.gridname
self.id=id
wx.Panel.__init__(self, id=-1, name=self.name,
parent=self.parent, size=wx.Size(532, 290),
style=wx.TAB_TRAVERSAL)
self.SetClientSize(wx.Size(524, 256))
self.Rate = wx.StaticText(id=-1, label='Rate'+' '+self.name,
name='Rate', parent=self, size=wx.Size(190,
20), style=0)
self.Rate.SetFont(wx.Font(12, wx.SWISS, wx.NORMAL, wx.BOLD, False,
'Microsoft Sans Serif'))
self.rate = wx.TextCtrl(id=-1, name='rate',
parent=self, size=wx.Size(100, 21), style=0,
value='')
self.staticText2 = wx.StaticText(id=-1,
label='s^-1', name='staticText2', parent=self,
size=wx.Size(20, 13), style=0)
self.TEMPDEP = wx.CheckBox(id=-1,
label='temperature dependent?', name='TEMPDEP', parent=self,
size=wx.Size(200, 13), style=0)
self.TEMPDEP.SetValue(False)
self.gridname = wx.grid.Grid(id=self.id, name=self.name,
parent=self, size=wx.Size(500, 100),
style=wx.CAPTION | wx.MINIMIZE_BOX)
self.CALCULATE = wx.Button(id=-1,
label='Calculate', name='CALCULATE', parent=self,
size=wx.Size(75, 23), style=0)
self.ANOTHERRATE = wx.Button(id=-1,
label='Another rate?', name='ANOTHERRATE', parent=self,
size=wx.Size(75, 23), style=0)
self.NOMST = wx.RadioButton(id=-1,
label='nominal strain / stress', name='NOMST', parent=self,
size=wx.Size(150, 13), style=0)
self.NOMST.SetValue(False)
self.TRUST = wx.RadioButton(id=-1,
label='total logarithmic strain / true stress', name='TRUST',
parent=self, size=wx.Size(200, 13),
style=0)
self.TRUST.SetValue(False)
self.boxSizer1 = wx.BoxSizer(orient=wx.HORIZONTAL)
self.boxSizer1.Add(self.Rate,
flag=wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL | wx.LEFT,
border=10)
self.boxSizer1.AddSpacer(wx.Size(15, 15), border=0, flag=0)
self.boxSizer1.Add(self.rate, flag=wx.ALIGN_RIGHT |
wx.ALIGN_CENTER_VERTICAL | wx.LEFT, border=10)
self.boxSizer1.AddSpacer(wx.Size(15, 15), border=0, flag=0)
self.boxSizer1.Add(self.staticText2, flag=wx.ALIGN_RIGHT |
wx.ALIGN_CENTER_VERTICAL | wx.LEFT, border=10)
self.boxSizer2 = wx.BoxSizer(orient=wx.HORIZONTAL)
self.boxSizer2.Add(self.CALCULATE, 0, border=2, flag=0)
self.boxSizer2.AddSpacer(wx.Size(15, 15), border=0, flag=0)
self.boxSizer2.Add(self.ANOTHERRATE, 0, border=2, flag=0)
self.boxSizer2.AddSpacer(wx.Size(15, 15), border=0, flag=0)
self.boxSizer3 = wx.BoxSizer(orient=wx.HORIZONTAL)
self.boxSizer3.Add(self.NOMST, 0, border=0, flag=0)
self.boxSizer3.AddSpacer(wx.Size(15, 15), border=0, flag=0)
self.boxSizer3.Add(self.TRUST, 0, border=0, flag=0)
self.flexGridSizer1 = wx.BoxSizer(orient=wx.VERTICAL)
self.flexGridSizer1.AddSpacer(wx.Size(15, 15), border=0, flag=0)
self.flexGridSizer1.Add(self.boxSizer1, 2, border=10, flag=0)
self.flexGridSizer1.AddSpacer(wx.Size(15, 15), border=0, flag=0)
self.flexGridSizer1.Add(self.TEMPDEP, 0, border=10, flag=0)
self.flexGridSizer1.AddSpacer(wx.Size(15, 15), border=0, flag=0)
self.flexGridSizer1.Add(self.boxSizer3, 0, border=0, flag=0)
self.flexGridSizer1.AddSpacer(wx.Size(15, 15), border=0, flag=0)
self.flexGridSizer1.Add(self.gridname, 0, border=10, flag=0)
self.flexGridSizer1.Add(self.boxSizer2, 0, border=10, flag=0)
self.flexGridSizer1.AddSpacer(wx.Size(15, 15), border=0, flag=0)
self.a={}
PanelTabelle.SetSizer(self, self.flexGridSizer1 )
PanelTabelle.SetAutoLayout(self, 1)
self.gridname.CreateGrid(self.i,self.j)
for x in xrange(0,self.i):
for y in xrange(0,self.j):
self.a[self.name,x,y]=self.gridname.GetCellValue(x,y)
for x in xrange(0,self.i):
for y in xrange(0,self.j):
self.a[self.name,x,y]=self.gridname.GetCellValue(x,y)
text = "0 1 100 200"
class TestPanel(scrolled.ScrolledPanel):
def __init__(self, parent, log):
self.log = log
self.i=5
self.j=7
scrolled.ScrolledPanel.__init__(self, parent, -1)
vbox = wx.BoxSizer(wx.VERTICAL)
desc = wx.StaticText(self, -1,
"Testtext"
)
desc.SetForegroundColour("Blue")
vbox.Add(desc, 0, wx.ALIGN_LEFT|wx.ALL, 5)
vbox.Add(wx.StaticLine(self, -1, size=(900,-1)), 0, wx.ALL, 5)
vbox.Add((20,20))
words = text.split()
panel1 = scrolled.ScrolledPanel(self, -1, size=(800, 600),
style = wx.TAB_TRAVERSAL|wx.SUNKEN_BORDER,
name="panel1" )
fgs1 = wx.FlexGridSizer(cols=2, vgap=4, hgap=4)
PanelID=6000
a={}
i=1
for word in words:
label = wx.StaticText(panel1, -1, "Rate"+word+":")
tc = wx.TextCtrl(panel1, -1, word, size=(50,-1))
test="test_%s"%(word)
tab=PanelTabelle(parent=panel1, id=PanelID,
size=wx.Size(500, 323), style=0, name=test,
sizer=test,i=self.i,j=self.j)
ident=PanelID+1
PanelID+=2
i+=1
fgs1.Add(label, flag=wx.ALIGN_RIGHT |
wx.ALIGN_CENTER_VERTICAL | wx.LEFT, border=10)
fgs1.Add(tc, flag=wx.RIGHT, border=10)
fgs1.AddSpacer(wx.Size(30, 30), border=4, flag=0)
fgs1.Add(tab)
for x in xrange (0,self.i):
for y in xrange (0,self.j):
tab.gridname.SetCellValue(x,y,"%s(%s,%s)"%(word,x,y))
panel1.SetSizer( fgs1 )
panel1.SetAutoLayout(1)
panel1.SetupScrolling()
hbox = wx.BoxSizer(wx.HORIZONTAL)
hbox.Add((20,20))
hbox.Add(panel1, 0, wx.FIXED_MINSIZE)
hbox.Add((40, 10))
vbox.Add(hbox, 0)
self.SetSizer(vbox)
self.SetAutoLayout(1)
self.SetupScrolling()
#----------------------------------------------------------------------
def runTest(frame, nb, log):
win = TestPanel(nb, log)
return win
#----------------------------------------------------------------------
if __name__ == '__main__':
import sys,os
import run
run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])
1. Ich weiß nicht, wie ich auf den Inhalt von den Tabellen zugreifen
kann! Wie kann ich auf den Inhalt von z.B. der obersten Tabelle
zweite Spalte, zweite Reihe zugreifen?
Jede Tabelle hat eine bekannt ID! Hilft das?
2. Diese Datei 'run.py' habe ich kopiert! Was brauche ich daraus?
Mir würde es genügen, wenn mir jemand sagt, was zu tun ist,
damit ich die 'FrameMitScrolledPanel.py' von einem anderen
Framea us starten könnte.
3. Um nicht die Tabelleanzahl über die word in words (Anzahl der
Wörter o.ä.) zu steuern, sondern über den Button 'Another rate?'
müsste ich doch nur eine Methode erstellen, die die Klasse
'PanelTabelle' nochmal initialisiert und sie dann dem Sizer in
dem Scrolled Panel übergibt? Oder???
Vielen Dank für eure Hilfe!!!
Gruß
Jens