Bild rechts von Knöpfen anzeigen lassen

Fragen zu Tkinter.
Antworten
MatsIPace
User
Beiträge: 1
Registriert: Dienstag 13. November 2018, 15:34

Dienstag 13. November 2018, 15:46

Moin, ich möchte gerne dieses Bild

Bild

in diesem Programm rechts an der Seite der Knöpfe anzeigen lassen, finde aber keinen Weg das zu tuhen.
Das ist mein erstes Programm also bitte nicht zu hart zu mir sein! :D
from tkinter import *
from math import *

window = Tk()
window.title("Star Calculator")
window.geometry('190x360')
window.config(bg='black')

solarmass = Entry(window,width=10)
solarmass.grid(column=3, row=1)

Solarmasses = Label(window, text="Enter Solar Masses here")
Solarmasses.grid(column=3, row=0)

MainData = Label(window, text="Main Data")
MainData.grid(column=3, row=5)
MainData.config(font=('Arial', 12))

Luminosity = Label(window, text="Luminosity")
Luminosity.grid(column=3, row=6)

Diameter = Label(window, text="Diameter")
Diameter.grid(column=3, row=7)

Temperature = Label(window, text="Surface Temperature")
Temperature.grid(column=3, row=8)

Lifetime = Label(window, text="Lifetime of Star")
Lifetime.grid(column=3, row=9)

#Orbits

Orbits = Label(window, text="Orbits")
Orbits.grid(column=3, row=10)
Orbits.config(font=('Arial', 12))

InBorbit = Label(window, text="Inner Boundary")
InBorbit.grid(column=3, row=13)

OutBorbit = Label(window, text="Outer Boundary")
OutBorbit.grid(column=3, row=14)

#Habitable Zone

HabitZone = Label(window, text="Habitable Zone")
HabitZone.grid(column=3, row=15)
HabitZone.config(font=('Arial', 12))

InHB = Label(window, text="Inner Boundary")
InHB.grid(column=3, row=16)

OutHB = Label(window, text="Outer Boundary")
OutHB.grid(column=3, row=17)
#Extra
Class = Label(window, text="Class of your Star")
Class.grid(column=3, row=18)
MainSeq = Label(window, text="Only for Main-Sequence Stars")
MainSeq.grid(column=3, row=19)

#Rechnungen
def clicked():
# Leuchtkraft
lumi = float(solarmass.get()) ** 3
Luminosity.configure(text= "%.3f" % lumi + " LSun")
# Durchmesser
diam = float(solarmass.get()) ** 0.74 * 1392.684
Diameter.configure(text= "%.2f" % diam + " km")
# Oberflächentemperatur
temp = float(solarmass.get()) ** 0.505 * 5778
Temperature.configure(text= "%.0f" % temp + " Kelvin")
# Lebensdauer
lifetime = float(solarmass.get()) ** -2.5 * 12.5
Lifetime.configure(text= "%.2f" % lifetime + " B years")

#--Orbits--#
# InnereGrenzeOrbits
innerorbit = float(solarmass.get()) * 0.1
InBorbit.configure(text= "%.2f" % innerorbit + " Au")
# ÄußereGrenzeOrbits
outerorbit = float(solarmass.get()) * 40
OutBorbit.configure(text= "%.2f" % outerorbit + " Au")

#--Habitable Zone--#
h = lumi ** 0.5
#InnereGrenze
innerhb = h / 100 * 95
InHB.configure(text= "%.2f" % innerhb + " Au")
#ÄußereGrenze
outerhb = h / 100 * 137
OutHB.configure(text= "%.2f" % outerhb + " Au")
#Class
if float(solarmass.get()) < 0.45:
Class.configure(text= "M Dwarf")
elif float(solarmass.get()) < 0.8:
Class.configure(text= "K Dwarf")
elif float(solarmass.get()) < 1.04:
Class.configure(text= "G Dwarf")
elif float(solarmass.get()) < 1.4:
Class.configure(text= "F Dwarf")
elif float(solarmass.get()) < 2.1:
Class.configure(text= "A Dwarf")
elif float(solarmass.get()) < 16:
Class.configure(text= "B Dwarf")
elif float(solarmass.get()) > 16:
Class.configure(text= "O Dwarf")
else:
Class.configure(text= "Something's wrong!")
#------------------------------------------------------#

#Klassen = PhotoImage(file="klassen.png")
#klassen = Label(image=Klassen)
#klassen.pack()


btn = Button(window, text="Calculate", command=clicked)
btn.grid(column=3, row=3)

window.mainloop()
Benutzeravatar
__blackjack__
User
Beiträge: 1558
Registriert: Samstag 2. Juni 2018, 10:21

Mittwoch 14. November 2018, 13:10

@MatsIPace: Der Link zu dem Bild in Deiner Dropbox funktioniert nur für Dich wenn Du angemeldet bist. Das sieht also ausser Dir hier keiner.

Wenn das Bild rechts neben allen bisherigen Elementen angezeigt werden soll, könntest Du alles bisherige in einen `Frame` stecken und dann das Bild und diesen Frame nebeneinander in das Hauptfenster `pack()`en.

Anmerkungen zum Quelltext: Werd die *-Importe los, schau dir den Style Guide for Python Code insbesondere bezüglich der Namensschreibweisen an, und dann gehört auf Modulebene nur Code der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst, und bei jeder nicht-trivialen GUI kommt man nicht um objektorientierte Programmierung (OOP) herum.

Edit: Warum wird *alles* in Spalte 3 vom `grid()`-Layout gesetzt? Das jetzige Layout hätte man mit `pack()` einfacher haben können. Und die Fenstergeometrie vorzugeben und das auch noch so knapp, ist keine gute Idee. Wenn das jemand auf einem Rechner ausführt auf dem die Schriftgrösse nur geringfügig grösser ist, passen die Texte nicht mehr in den hart vorgegebenen Platz. Lass das den Layout-Manager für Dich regeln, dafür ist er da.

Code: Alles auswählen

    **** COMMODORE 64 BASIC V2 ****
 64K RAM SYSTEM  38911 BASIC BYTES FREE
   CYBERPUNX RETRO REPLAY 64KB - 3.8P
READY.
█
Antworten