kyrsjo Skrevet 28. juli 2011 Del Skrevet 28. juli 2011 (endret) 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 Endret 28. juli 2011 av kyrsjo Lenke til kommentar
kyrsjo Skrevet 28. juli 2011 Forfatter Del Skrevet 28. juli 2011 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå