Ich benutze Python 2.7, um einen Satelliten-Tracker für ein Cubesat-Projekt an meiner Universität zu bauen. Jetzt läuft die ganze Sache so, wie ich es will. Ich produziere 4 Bilder und eine Ladung Text basierend auf den Orbit-Parametern der ISS, da unser CubeSat noch nicht fliegt.GUI mit Tkinter für Bild- und Texteingaben einrichten
Die 4 Bilder sind:
1) auf einem Globus auf seiner TLE gerade aus Celestrak basierend aktuellen Position des Satelliten.
2) Die aktuelle Position des Satelliten auf einer Mercator-Karte (flach).
3) Seine aktuelle Lat/Lon-Position in eine Google Earth-Ansicht übersetzt, um physikalisch zu interpretieren, wo es ist.
4) Die aktuelle Lat/Lon-Position basierend auf aktuellen Wetterkarten, ob Wolken in der Region vorhanden sind oder nicht, wodurch die Fähigkeiten der Satellitenfernerkundung beeinträchtigt werden. (Grund, warum das Bild hässlich und lila aussieht, ist, dass diese Region zum Zeitpunkt des Datenabrufs keine aktuellen Wetterdaten hatte)
Dann muss ich ein Textfeld mit Informationen über Höhe, Geschwindigkeit, räumliche Auflösung usw. implementieren.
Es ist alles nett und dandy. Aber ich kann nicht für die Liebe Gottes herausfinden, wie man diese Tkinter-GUI dazu bringt, nett zu spielen! Ich bin ein Geowissenschaftler, kein Computerwissenschaftler und Python Programmierung ist sehr neu für mich: D
Wie auch immer, ich habe ein schnelles Layout in Photoshop, wie ich die fertigen Daten in einem Tkinter GUI produziert werden soll. Siehe die primitive Bild unten:
Hier ist mein beschämender Code unten:
import Tkinter as tk
from PIL import ImageTk, Image
#This creates the main window of an application
window = tk.Tk()
window.title("Satellite Control Center")
window.geometry("1000x800")
window.configure(background='grey')
#Imports the pictures.
pic1 = "Globeview.png"
pic2 = "MercatorView.png"
pic3 = "currentweathercroppedsmall.png"
pic4 = "GECurrentcroppedsmall.png"
#Creates a Tkinter-compatible photo image, which can be used everywhere Tkinter expects an image object.
img1 = ImageTk.PhotoImage(Image.open(pic1))
img2 = ImageTk.PhotoImage(Image.open(pic2))
img3 = ImageTk.PhotoImage(Image.open(pic3))
img4 = ImageTk.PhotoImage(Image.open(pic4))
#The Label widget is a standard Tkinter widget used to display a text or image on the screen.
globeview = tk.Label(window, image = img1)
mercatorview = tk.Label(window, image = img2)
currentweather= tk.Label(window, image = img3)
gearth = tk.Label(window, image = img4)
#The Pack geometry manager packs widgets in rows or columns.
globeview.pack(side = "top", fill = "both", expand = "yes")
mercatorview.pack(side = "top", fill = "both", expand = "yes")
currentweather.pack(side = "bottom", fill = "both", expand = "yes")
gearth.pack(side = "bottom", fill = "both", expand = "yes")
#Start the GUI
window.mainloop()
Welche diese Horror-Show produziert!
Meine Fragen sind klar:
1) Bilder werden nicht in irgendeiner Art und Weise ausgerichtet ich will. Normalerweise würde ich in HTML Tabellenreihen einrichten, ausrichten und mit Abstandshaltern versehen, wie ich es möchte. Aber ich weiß nicht, wie ich das hier definieren soll und ich habe schon Stunden damit verbracht, frustriert darüber zu sein.
2) Ich muss ein Textfeld hinzufügen. Jedes Mal habe ich versucht, verschiedene Versionen von Textfeldern hinzuzufügen. Ich bekomme komische pyimage'xx 'Fehler und kein Textfeld scheint sich zu materialisieren.
3) Für die Zukunft: Eine Schaltfläche unter den Bildern, die das vollständige unbearbeitete Bild zeigen. Aber das ist im Moment nicht zwingend!
Also ich hoffe, einer von euch hat eine gute Möglichkeit, dies zu tun, oder kann mich in eine Richtung zeigen .. oder vielleicht sogar etwas getan haben, wo ich Ihren Code sehen kann und nur die Zahlen von a Bit zum Ausrichten der Pixel.
Vielen Dank im Voraus.
'tkinter' ist nicht' HTML' - es hat eigene Regeln, um Layout zu erstellen. Sie haben drei Layouts, die 'pack()', 'grid()' und 'place()' verwalten, aber Sie sollten nicht in einem Fenster oder Frame mischen, aber Sie können einen Manager im Hauptfenster verwenden, um Frames und verschiedene Manager zu setzen in jedem Rahmen (innerhalb des Rahmens kannst du einen anderen Rahmen mit einem anderen Manager setzen. – furas