da dies mein erster Post ist, möchte ich mich vorstellen. Mein Name ist Christopher, 28 Jahre jung und gerade in einer Umschulung zum Fachinformatiker Anwendungsentwicklung. Python gehört nicht zu meinem Schwerpunkt in der Umschulung, allerdings möchte ich dies aus eigenem Interesse erlernen. Meinen Erfahrungsgrad kann ich selber schwer einschätzen, ich habe in meiner Jugend mit VB6 programmiert und danach gelegentlich kleine Erfahrungen in Java sammeln können. OOP, Iterationen, usw. sind mir nicht fremd.
Python ist an sich ganz angenehm zu schreiben, wie ich finde, allerdings tu ich mich mit der GUI schwer. Wie sich bei Recherche rausstellte, ist das bei den meisten Anfängern so.
Mein Startprojekt soll ein Programm sein, welches über einen FileOpenDialog eine Grafik lädt und anzeigt. Das klappt soweit auch schon ganz gut, allerdings gefällt mir das Layout gar nicht. Habe schon darüber nachgedacht, die GUI per Glade zu erstellen und einzubinden, aber da hapert es dann doch an den "Skills".
Ich kann euch hier mal den Code einspeisen, den ich bisher habe:
Code: Alles auswählen
#!/usr/bin/python
from gi.repository import Gtk, GdkPixbuf, Gdk
import os, sys
class GUI:
def __init__(self):
#creating the window itself
window = Gtk.Window()
window.set_title ("cCloudImageViewer by Christopher Barkey")
window.set_default_size (300,150)
window.set_position(Gtk.WindowPosition.CENTER)
window.connect_after('destroy', self.destroy)
#creating a box
wBox = Gtk.HBox(False, 0)
mbox = Gtk.HBox(False, 5)
box = Gtk.HBox()
box.set_spacing (5)
box.set_orientation (Gtk.Orientation.HORIZONTAL)
#adding the box to the window
window.add (wBox)
wBox.add (mbox)
wBox.add (box)
self.Image = Gtk.Image()
box.pack_start (self.Image, False, False, 0)
#creating the buttons
buttonL = Gtk.Button ("<<")
buttonL.connect_after ('clicked', self.prev_image)
button = Gtk.Button ("Choose a file...")
button.connect_after ('clicked', self.on_open_clicked)
buttonR = Gtk.Button (">>")
buttonR.connect_after ('clicked', self.next_image)
mbox.pack_start (button, False, False, 0)
mbox.pack_start (buttonL, False, False, 0)
mbox.pack_start (buttonR, False, False, 0)
#show all
window.show_all()
#defining what happens when buttons are clicked
def prev_image (self, button):
print ("Previous Image")
def next_image (self, button):
print ("Next Image")
def on_open_clicked (self, button):
dialog = Gtk.FileChooserDialog ("Open Image", button.get_toplevel(), Gtk.FileChooserAction.OPEN);
dialog.add_button (Gtk.STOCK_CANCEL, 0)
dialog.add_button (Gtk.STOCK_OK, 1)
dialog.set_default_response(1)
filefilter = Gtk.FileFilter()
filefilter.add_pixbuf_formats()
dialog.set_filter(filefilter)
if dialog.run() ==1:
self.Image.set_from_file(dialog.get_filename())
dialog.destroy()
def destroy(window, self):
Gtk.main_quit()
def main():
app = GUI()
Gtk.main()
if __name__ == "__main__":
sys.exit(main())
Ich wünsche mir eine Anordnung wie diese:
Wenn ich versuche mehrere Boxen direkt auf das Window anzuwenden, dann bekomme ich die Meldung, dass nur ein Widget ginge. Packe ich 2 Boxen in 1 andere, dann funktioniert es zwar, aber ich bekomme die Anordnung nicht hin.
Ich hoffe ich konnte mein Problem deutlich schildern und vielleicht hat ja der Ein oder Andere Zeit, mir bei der Lösung zu helfen.
Mit freundlichem Gruß
Christopher
EDIT: Die "<<" und ">>" sollen später durch die Bilder in einem Verzeichnis browsen, das möchte ich allerdings erstmal hinten anstellen.