Gå til innhold

[Python] Embedded editor i et GTK-vindu


Anbefalte innlegg

Hei

 

Jeg jobber med en intern applikasjon for å styre (sende/motta/lage input-filer/kjøre analyser) beregningsjobber på en supercomputer. Til å lage grensesnittet bruker jeg PyGTK, som ligger oppå et lag av mine egne klasser som er uavhengig av GUI'et - et ganske fint design om jeg skal si det selv - og fullstendig pasta-fritt (personlig first når det gjelder gui-koding :) )

 

I den forbindelse ønsker jeg å kunne poppe opp (modalt) eller embedde en editor for en type input-fil som må skrives med tastatur (det er egentlig et spesielt programmeringsspråk som brukes av CAD/mesh-programmet CUBIT [1]).

 

Finnes det en ferdig widget jeg push'e på info-rammen min (der alle knappene etc. er i det vedlagte skjermbildet)? Gjerne "embedded emacs" eller gedit. Stort pluss om jeg kan sette noen regler for syntax highlighting. Mulighet for å sette fixed-width font er et must, pluss for automagisk tab->4 spaces.

 

Jeg har temmelig lang og mye erfaring med programmering (Python, C++ (GCC/CINT), CUBIT/Aprepo, Bash, Java, ...), men ikke så mye GUI'er...

 

[1] http://cubit.sandia.gov

post-25283-0-39474900-1311857560_thumb.png

Endret av kyrsjo
Lenke til kommentar
Videoannonse
Annonse

Hmm... Ser ut til at det blir å skrive sin egen, basert på TextView. Litt knot, menmen. Embedder den i en subklasse "InfoFrameComponent", som så pushes på stacken til "InfoFrameManager" - og blir vist i samme ramme hvor det nå står "Project Name:" osv.

 

Forøvrig, når vi snakker om den ramma: Det er en gtk.Frame(), hvor jeg add'et en gtk.VBox med en gtk.Table øverst, og noe skrot (DrawingArea?) nederst for å fylle ut plassen.

 

Er det noen måte å få ting til å ta den plassen det tar, istedet for å insistere på å fylle ut mest mulig? Den relevante koden for InfoFram'en som er vist ser slik ut:

class ProjectInfo(InfoFrameComponent):
   """
   Maintains the InfoFrame representing the top-level project
   """

   #Logic
   project = None

   #Widgets
   tableWidget = None

   projName_label = None
   projName_entry = None

   projFolder_label = None
   projFolder_entry = None

   jouTemplate_label = None
   jouTemplate_path  = None
   jouTemplate_editButton = None
   jouTemplate_newButton  = None
   jouTemplate_openButton = None

   #Subwindows
   editor = None

   def __init__(self, frameManager, project):
       InfoFrameComponent.__init__(self, frameManager)

       self.project = project

       #Setup GUI
       self.baseWidget = gtk.VBox(False,5)
       self.tableWidget = gtk.Table(4,3,False)
       self.tableWidget.set_row_spacings(3)
       self.tableWidget.set_col_spacings(3)
       self.baseWidget.pack_start(self.tableWidget)
       self.baseWidget.pack_start(gtk.DrawingArea()) #Some blank space

       # Name
       self.projName_label = gtk.Label("Project name:")
       self.projName_label.set_alignment(1.0,0.5)
       self.tableWidget.attach(self.projName_label, 0,1,0,1)

       self.projName_entry = gtk.Label(\
           "\"" + self.project.projectName_name + "\"")
       self.projName_entry.set_alignment(0.0,0.5)
       self.tableWidget.attach(self.projName_entry, 1,3,0,1)

       # Folder
       self.projFolder_label = gtk.Label("Stored in folder:")
       self.projFolder_label.set_alignment(1.0,0.5)
       self.tableWidget.attach(self.projFolder_label, 0,1,1,2)

       self.projFolder_entry = gtk.Label(\
           "\"" + self.project.projectFolder_name + "\"")
       self.projFolder_entry.set_alignment(0.0,0.5)
       self.tableWidget.attach(self.projFolder_entry, 1,3,1,2)

       # CUBIT journal template
       self.jouTemplate_label = gtk.Label("Geometry template journal:")
       self.jouTemplate_label.set_alignment(1.0,0.5)
       self.tableWidget.attach(self.jouTemplate_label, 0,1,2,3)

       self.jouTemplate_path = gtk.Label()
       self.jouTemplate_path.set_alignment(0.0,0.5)
       self.tableWidget.attach(self.jouTemplate_path, 1,3,2,3)

       self.jouTemplate_editButton = gtk.Button(\
           stock=gtk.STOCK_EDIT)
       self.jouTemplate_editButton.connect(\
           "clicked", self.event_button_jouTemplate_edit, None)
       self.tableWidget.attach(\
           self.jouTemplate_editButton, 0,1,3,4)

       self.jouTemplate_newButton = gtk.Button(\
           stock=gtk.STOCK_NEW)
       self.jouTemplate_newButton.connect(\
           "clicked", self.event_button_jouTemplate_new, None)
       self.tableWidget.attach(\
           self.jouTemplate_newButton, 1,2,3,4)

       self.jouTemplate_openButton = gtk.Button(\
           stock=gtk.STOCK_OPEN)
       self.jouTemplate_openButton.connect(\
           "clicked", self.event_button_jouTemplate_open, None)
       self.tableWidget.attach(\
           self.jouTemplate_openButton, 2,3,3,4)

       self.jouTemplateWidgets_update()

       #Finalizing
       self.baseWidget.show_all()

   (...osv...)

 

Her er det baseWidget som blir add()'et til en gtk.Frame() (du ser firkanten til den)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...