Fensterprojekt mit Tkinter möglich?

Fragen zu Tkinter.
Antworten
Nobuddy
User
Beiträge: 1015
Registriert: Montag 30. Januar 2012, 16:38

Hallo zusammen,
ich möchte eine grafische Oberfläche erstellen, die folgendes beinhalten soll:
- Terminalausgabe, evtl. auch zum Editieren von Daten
- Menüpunkte
- Buttons

Da Tkinter Standard bei Python ist, stellt sich für mich die Frage, ob ich obige Punkte damit umsetzen kann oder eine andere GUI dafür verwenden muß?

Für Inputś und Tipps von Euch, würde ich mich sehr freuen.

Grüße Nobuddy
BlackJack

@Nobuddy: Kennst Du IDLE? Die Python IDE die bei einer Vollinstallation von Python dabei ist? Die ist mit Tkinter realisiert. Und sollte alle Deine drei Punkte enthalten.

Wobei Terminalausgabe ein weit gefasster Begriff sein kann. Eine echte Terminalemulation ist etwas umfangreicher, aber vielleicht brauchst Du die auch gar nicht komplett‽
Nobuddy
User
Beiträge: 1015
Registriert: Montag 30. Januar 2012, 16:38

@BlackJack, IDLE ist mir schon ein Begriff, habe es bisher aber nicht genutzt.
Habe IDLE installiert und werde mich da mal einlesen, damit ich weiß was IDLE genau ist und wie ich es anwenden muß.

Mit Terminalausgabe, habe ich die Ausgabe die beim Ausführen von Python-Programmen, wie z.B. Print- und Fehlerausgaben ausgegeben werden gemeint.
Nobuddy
User
Beiträge: 1015
Registriert: Montag 30. Januar 2012, 16:38

Wenn ich das richtig sehe, ist IDLE eine Entwicklungsumgebung, wie z.B. Geany.
Sollte dann wohl als Beispiel dienen, ist das richtig?
BlackJack

@Nobuddy: Ja. Insbesondere was die Ausgabe/Eingabe angeht, denn es startet ja mit einem Fenster wo eine interaktive Python-Shell drin läuft.
Nobuddy
User
Beiträge: 1015
Registriert: Montag 30. Januar 2012, 16:38

Danke, für die Info, werde zukünftig IDLE verwenden.

Nun muß ich schauen, wie ich so ein eigenes Fenster für meine Zwecke erstellen kann.
Da muß ich mich noch in Tkinter einlesen.
Nobuddy
User
Beiträge: 1015
Registriert: Montag 30. Januar 2012, 16:38

Habe mal einen kleinen Anfang gemacht.

Code: Alles auswählen

#!/usr/bin/python3

from tkinter import Tk
from tkinter import Menu
from tkinter import Button
from tkinter import mainloop
import sys

# menu1
def data_complett_update():
    import y0_data_complett_update
    
def data_base_edit():
    import z5_listbase

# menu2
def data_backup():
    import z7_backup

def data_restore():
    print('Datenwiederherstellung')

root = Tk()
root.title('officeplanet')
root.geometry('800x600')
myMenu = Menu(root)
root.config(menu = myMenu)

menu1 = Menu(myMenu)
myMenu.add_cascade(label = 'EDV', menu = menu1)
menu1.add_command(label = 'Daten-Update', command = data_complett_update)
menu1.add_command(label = 'Edit Basis-Daten', command = data_base_edit)

menu2 = Menu(myMenu)
myMenu.add_cascade(label = 'Sicherheit', menu = menu2)
menu2.add_command(label = 'Backup', command = data_backup)
menu2.add_command(label = 'Restore', command = data_restore)

root.mainloop()
Das ist erst mal ein Beispiel, damit ich sehe was wie funktioniert. :wink:

Wie bekomme ich es hin, daß die Print-/ und Fehler-Ausgaben im gleichen Fenster ausgegeben werden?
Welche Schritte sind hier notwendig?
Nobuddy
User
Beiträge: 1015
Registriert: Montag 30. Januar 2012, 16:38

Bin dabei mich in Tkinter einzuarbeiten, was durch mangelnde deutsche Referenzen, für mich das etwas erschwert.
Aber ich lasse mich dadurch nicht unterkriegen und kämpfe mich durch englischsprachige Referenzen durch.

Eine davon ist diese: http://infohost.nmt.edu/tcc/help/pubs/tkinter/

Solltet Ihr für mich noch weitere hilfreiche Links und Infos haben, würde ich mich darüber freuen! :wink:
Nobuddy
User
Beiträge: 1015
Registriert: Montag 30. Januar 2012, 16:38

Hallo zusammen,
ich habe angefangen, ein Konzept für mich zu entwickeln und würde von Euch gerne erfahren, was falsch bzw. anderst gemacht werden sollte.
Zuvor noch ein paar eigene Gedanken.
Ich möchte eine flexibles Fenster erstellen, das vom Layout her immer gleich ist.
Was sich aber verändern soll, sind die Buttons die verschiedene Aufgaben erfüllen sollen.

Bitte lasst Euch von den verschiedenen Farben nicht irritieren, die sind nur für mich, um die Layout-Ergebnisse besser erkennen zu können.

Hier mal mein Code:

Code: Alles auswählen

#!/usr/bin/python3

from tkinter import Tk
from tkinter import Frame
from tkinter import Label
from tkinter import Menu
from tkinter import Button
from tkinter import Text
from tkinter import Entry
from tkinter import mainloop
from tkinter.filedialog import askopenfilename
import sys

# menu_a
def menu_a1():
    name = askopenfilename() 
    print(name)
    return

def menu_a2():
    pass
    return

def menu_a3():
    pass
    return

# menu_b
def menu_b1():
    import y0_data_complett_update
    return
    
def menu_b2():
    import z5_listbase
    return

# menu_c
def menu_c1():
    import z7_backup
    return

def menu_c2():
    print('Datenwiederherstellung')
    return

def mainmenu(root):
    # Hauptmenü oben
    myMenu = Menu(root, background = 'yellow')
    root.config(menu = myMenu)
    menu_a = Menu(myMenu)
    myMenu.add_cascade(label = 'Datei', menu = menu_a)  # Hauptmenü
    menu_a.add_command(label = 'Öffnen', command = menu_a1)
    menu_a.add_command(label = 'Speichern', command = menu_a2)
    menu_a.add_command(label = 'Einstellungen', command = menu_a3)
    menu_b = Menu(myMenu)
    myMenu.add_cascade(label = 'EDV', menu = menu_b)    # Hauptmenü
    menu_b.add_command(label = 'Daten-Update', command = menu_b1)
    menu_b.add_command(label = 'Edit Basis-Daten', command = menu_b2)
    menu_c = Menu(myMenu)
    myMenu.add_cascade(label = 'Sicherheit', menu = menu_c) # Hauptmenü
    menu_c.add_command(label = 'Backup', command = menu_c1)
    menu_c.add_command(label = 'Restore', command = menu_c2)

def window_area_left(root):
    lab0 = Label(root, width=15, background = 'yellow')
    lab0.pack(side='left', expand='YES', fill='y')

def window_area_right(root):
    lab1 = Label(root, width=15, background = 'yellow')
    lab1.pack(side='right', expand='YES', fill='y')

def workspace(root):
    lab2 = Label(root, width=200, background = 'red')
    lab2.pack(anchor='n', expand='YES', fill='y')

def window_area_below(root):
    lab3 = Label(root, width=200, background = 'green')
    lab3.pack(anchor='s', fill='x')
    # Text-Eingabe
    eingabefenster = Entry(lab3, width = 80, background = 'black', 
                        foreground = 'white', font = ('NimbusSansL',14))
    eingabefenster.pack(anchor='n')
    # Bereich-Buttons
    lab4 = Label(lab3, heigh=5, width=100, background = 'blue')
    lab4.pack(anchor='s')

def WindowBase():
    root = Tk()
    root.title('officeplanet')
    root.geometry('1280x1024')
    mainmenu(root)    # Hauptmenü
    window_area_left(root)    # Bereich links
    window_area_right(root)    # Bereich rechts
    workspace(root)    # Bereich oben
    window_area_below(root)    # Bereich unten    
    root.mainloop()
WindowBase()
Antworten