Ja, ich war die letzten Tage dabei mein Skript etwas umzubauen und habe bisher als Basis den entwurf von Alfons genommen. Ich werde mir jetzt mal alle Sachen heraussuchen und schauen was ich davon brauchen kann

Hier habe ich mittlerweil mal etwas weiter gebastelt. Auch habe ich grid verwendet, leider kann ich mich damit nicht wirklich anfreunden da es sich automatisch vergrößert, am liebsten hätte ich ja eine feste größe...
Hier mein Script
Code: Alles auswählen
#!/usr/bin/env python
import Tkinter
from Tkinter import Button, Tk, Canvas, Label
c_height = 476
c_width = 316
root = Tk()
root.config(width=(c_width - 40), height=c_height, bg="black", cursor="none")
root.resizable(width=0, height=0)
textFont = "Helvetica"
# Declare Variables
measuredItems = ["RPM", "Water", "EGT", "Oil Press", "Oil Temp", "Fuel Flow", "Fuel Quant."]
errorBoxItems = ["TEMP", "PRESS", "FUEL", "POWER", "ERROR"]
errorBoxItemsColor = ["red", "green", "green", "yellow", "green"]
measuredItemsColor = ["green", "green", "green", "green", "green", "green", "green"]
measuredItemsValue = [0, 10, 10, 0, 0, 0, 0]
testVal = 1
screen = None
loadActiveWindow = None
def setupGrid(parent):
for i in range(0, 4):
parent.rowconfigure(i, minsize=24)
parent.rowconfigure(5, minsize=120)
parent.rowconfigure(6, minsize=120)
parent.rowconfigure(7, minsize=120)
parent.columnconfigure(0, minsize=20)
parent.columnconfigure(1, minsize=125)
parent.columnconfigure(2, minsize=125)
parent.columnconfigure(3, minsize=20)
def create_canvas(parent):
global screen
C = Canvas(parent, bg="black", height=c_height, width=(c_width - 40))
C.grid(row=0, column=1, rowspan=8, columnspan=2)
screen = C
def bootScreen(parent):
pass
# value1 = Label(parent, text="test").grid(row=1,column=1) # Write value into the box
def mainWindow(parent):
errorWindow(root)
Testline = parent.create_line(140, 0, 140, 480, fill="red")
Testline2 = parent.create_line(0, 240, 280, 240, fill="red")
if (measuredItemsValue[0] < 500):
measuredItemsValue[0] += 1
else:
pass
gauge1 = digitalGauge(root, 0, 1, measuredItemsColor[0], measuredItemsValue[0], 500, measuredItems[0], 1)
gauge2 = digitalGauge(root, 5, 1, measuredItemsColor[1], measuredItemsValue[1], 500, "Breite", 1)
gauge3 = digitalGauge(root, 6, 1, measuredItemsColor[2], measuredItemsValue[2], 500, "Hoehe", 1)
gauge4 = digitalGauge(root, 7, 1, measuredItemsColor[1], 2000, 6000, measuredItems[1], 1)
# gauge6 = digitalGauge(root, 5, 2, measuredItemsColor[1], 2000, 6000, measuredItems[1], 1)
# gauge7 = digitalGauge(root,6, 2, measuredItemsColor[2], 2000, 6000, measuredItems[2], 1)
# gauge8 = digitalGauge(root, 7, 2, measuredItemsColor[1], 2000, 6000, measuredItems[1],1)
class digitalGauge:
def __init__(self, window, row, column, color, value, maxVal, name, gaugeScale):
self.G = Canvas(window, bg="black", height=100, width=100)
if (row <= 4):
self.G.grid(column=column, row=row, sticky="WENS", rowspan=5)
else:
self.G.grid(column=column, row=row, sticky="WENS")
xval = 20
yval = 10
self.coord = xval + 5, yval + 5, (xval + 100) * gaugeScale, (yval + 100) * gaugeScale
self.gaugeValue = maxVal / float(value) # calculate the GaugeValue
self.hand = self.G.create_arc(xval, yval, (xval + 100 * gaugeScale), (yval + 100 * gaugeScale), start=0,
extent=-(220 / self.gaugeValue), fill=color) # Draw hand
self.outline = self.G.create_arc(xval - 3, yval - 3, (xval + 100 * gaugeScale + 3),
(yval + 100 * gaugeScale + 3), start=0, extent=-220, style="arc",
outline="white", width=2) # draw outline
self.valueBox = self.G.create_rectangle((xval + 50 * gaugeScale), yval + 20 * gaugeScale,
xval + 100 * gaugeScale + 3, yval + 50 * gaugeScale, outline='white',
width=2) # draw Value Box
self.value1 = self.G.create_text(xval + 54 * gaugeScale, yval + 22 * gaugeScale, anchor="nw", text=value,
fill="white", font=(textFont, int(round(15 * gaugeScale))))
self.value2 = self.G.create_text(xval, yval - 8, anchor="nw", text=name, fill="white",
font=(textFont, int(round(19 * gaugeScale))))
class buttonSet:
def __init__(self, window):
# left
Button(window, text="MAIN", wraplength=1, command=lambda: do_loadActiveWindow("Main", 0), font=(textFont, 9),
bg="light slate grey").grid(column=0, row=0, sticky="WENS", rowspan=5)
Button(window, text="ENG", wraplength=1, command=lambda: do_loadActiveWindow("ENG", 0), font=(textFont, 9),
bg="light slate grey").grid(column=0, row=5, sticky="WENS")
Button(window, text="NAV", wraplength=1, command=lambda: do_loadActiveWindow("NAV", 0), font=(textFont, 9),
bg="light slate grey").grid(column=0, row=6, sticky="WENS")
Button(window, text="STAT", wraplength=1, command=lambda: do_loadActiveWindow("STAT", 0), font=(textFont, 9),
bg="light slate grey").grid(column=0, row=7, sticky="WENS")
# right
Button(window, text="PERF", wraplength=1, command=lambda: do_loadActiveWindow("PERFORMANCE", 0),
font=(textFont, 9), bg="light slate grey").grid(column=3, row=0, sticky="WENS", rowspan=5)
Button(window, text="MEDIA", wraplength=1, command=lambda: do_loadActiveWindow("MEDIA", 0), font=(textFont, 9),
bg="light slate grey").grid(column=3, row=5, sticky="WENS")
Button(window, text="NET", wraplength=1, command=lambda: do_loadActiveWindow("NETWORK", 0), font=(textFont, 9),
bg="light slate grey").grid(column=3, row=6, sticky="WENS")
Button(window, text="SETTINGS", wraplength=1, command=lambda: do_loadActiveWindow("BOOT", 0),
font=(textFont, 9), bg="light slate grey").grid(column=3, row=7, sticky="WENS")
def errorWindow(parent):
itemfound = 0
for i in range(0, len(errorBoxItemsColor)):
if (errorBoxItemsColor[i] != "green"):
itemfound += 1
Label(parent, text=errorBoxItems[i], bg="black", fg=errorBoxItemsColor[i], font=(textFont, 13)).grid(
column=2, row=i, sticky="S")
Buttons = buttonSet(root) # drawing a Set of buttons
activeWindow = 'BOOT'
def do_loadActiveWindow(selection, updateonly):
global activeWindow
if updateonly == 1: # If updateonly Ignore the selection variable
selection = activeWindow
# if selection != activeWindow:
activeWindow = selection
screen.destroy()
create_canvas(root)
if selection == 'Main':
mainWindow(screen)
if selection == 'BOOT':
bootScreen(screen)
create_canvas(root)
setupGrid(root)
do_loadActiveWindow('Main', 0)
def updateScreen():
do_loadActiveWindow("", 1)
measuredItemsValue[1] = root.winfo_width() # for debugging Purpose
measuredItemsValue[2] = root.winfo_height() # for debugging Purpose
root.after(500, updateScreen)
updateScreen()
root.mainloop()
Die Breite wird durch Gauge 2 angezeigt, höhe durch Gauge 3. Unter Windows hat das Frame eine größe von 320*480 (wie ihr seht musste ich dazu auch oben die Frame größe um 4 Pixel anpassen).
Starte ich jedoch das selbe Script unter Linux (raspberry), habe ich eine Größe von 354x484.
Gibt es keine Möglichkeit dem Grid eine feste Größe zuzuteilen?
Grüße