Seite 1 von 1

Tkinter und wx.Python....geht das zusammen???

Verfasst: Dienstag 23. Juni 2015, 14:27
von DMD
hi leute,
als neuling habe ich grad ein riesenproblem, das ich schon laenger nicht geloest bekomme.
(ich hoffe, ich bin hier im korrekten bereich).
ich habe unten meinen code (stark abgespeckt) aufgeführt, der denke ich (zum kopieren) laufbereit ist.

ich benutze windows 8 und python 2.6. damit habe ich mit Tkinter eine kontoverwaltung erstellt, in der man u.a.
ein konto waehlen kann, sich aber auch zusätzlich ueber einen button (konten anzeigen) eine uebersicht der bereits vorhanden konten ausgeben
lassen kann (Kontotabelle, die bei mir auch geordnete Adressen ausgibt). die tabelle wird mit wx.Python erstellt. soweit so gut :)

wenn man sich also die konten anzeigen lässt, soll man parallel ein konto eingeben können und mit anschliessender bestaetigung soll das tabellenfenster
wieder geschlossen werden.
kann mir jemand von euch helfen, was man da als code eingibt?

hier mein code:


Code: Alles auswählen

#!/usr/bin/python
# -*- coding: utf8 -*-

from Tkinter import *
import tkMessageBox
import ctypes
import pickle
import os
import wx
import wx.grid
from operator import itemgetter, attrgetter, methodcaller
import time

class Verwaltung(object):

    def konto(self):
        pass

# Tkinter Klasse -----------------------------------------------------------------------------------------------------------------------------
# Fenster: Startbildschirm (Konto waehlen und beenden)---------

        def hauptStart():

            hfenster = Tk()
            hfenster.title('GUI-Verwaltung')
            hfenster.geometry('600x400+500+200')

            label1 = Label(hfenster,text="' KONTO-VERWALTUNG '", font=('Arial', 10, 'bold underline'))
            label1.place(relx=.2, rely=.1, anchor="c")

            label4 = Label(hfenster,text='Herzlich willkommen zu DMD-Datasoft \n (...developed by Christian Olling)')
            label4.place(relx=.2, rely=.93, anchor="c")


# Tkinter Klasse --------------------------------------------------------------------------------------------------------------------------------------------------------------

# Erstellen der Kontotabelle mit wx.Python -------------------------------------------------------------------------------------------------------------------------------------

            wx.SetDefaultPyEncoding("iso-8859-15")

            class MyFrame(wx.Frame):

                def __init__(
                    self, parent = None, title = "Example", size = wx.Size(291, 300)):
                    wx.Frame.__init__(self, parent, -1, title, size = size)

                    panel = wx.Panel(self)

                    vbox_main = wx.BoxSizer(wx.VERTICAL)
                    panel.SetSizer(vbox_main)

                    grid = wx.grid.Grid(panel)
                    vbox_main.Add(grid, 1, wx.EXPAND | wx.ALL, 5)

                    grid.SetColLabelSize(30)
                    grid.SetRowLabelSize(25)

#--------------------------------------------------------------------------------------------------------------------------------------------------------------------

                def onClose(self, event):
                    """"""
                    self.Close()            # <--- diesen Befehl moechte ich gern ausserhalb dieser Klasse ansprechen (innerhalb der Klasse funktiert
                                            #      der, aber wie lautet der ausserhalb der geschuetzten wx.python Klasse???

#--------------------------------------------------------------------------------------------------------------------------------------------------------------------

            def daten():
                app = wx.PySimpleApp()
                f = MyFrame()
                f.Center()
                f.Show()
                app.MainLoop()

# wx.Python Klassenende -------------------------------------------------------------------------------------------------------------------------------------------------------------

# Tkinter Klasse --------------------------------------------------------------------------------------------------------------------------------------------------------------
            def kontoWaehlen():
                try:
                    hfenster.destroy()
                except:
                    pass
                u5fenster = Tk()
                u5fenster.title('GUI-Verwaltung')
                u5fenster.geometry('600x300+500+200')

                label50 = Label(u5fenster,text="2. 'AUSWAEHLEN EINES KONTOS'", font=('Arial', 10, 'bold underline'))
                label50.place(relx=.23, rely=.18, anchor="c")
                label51 = Label(u5fenster,text='2.1. Eingeben der zu suchenden Kontonummer', font=('Arial', 9, 'underline'))
                label51.place(relx=.28, rely=.31, anchor="c")
                label52 = Label(u5fenster,text='Herzlich willkommen zu DMD-Datasoft \n (...developed by Christian Olling)')
                label52.place(relx=.2, rely=.91, anchor="c")
                label53 = Label(u5fenster, fg="red")
                label53.place(relx=.6, rely=.645, anchor="c")

                label54 = Label(u5fenster,text='Bitte gib deine Kontonummer ein:')
                label54.place(relx=.34, rely=.5, anchor="c")
                eingabe54 = Entry(u5fenster)
                eingabe54.place(relx=.6, rely=.5, anchor="c")


#----------------------------------------------------------------------------------------------------------------------------------------------

                def kontoWahlausgabe():


                    #Befehl zum Schliessen des Tabellenfensters (nur was???)

#----------------------------------------------------------------------------------------------------------------------------------------------

                    try:
                        u5fenster.destroy()
                    except:
                        pass

                    u6fenster = Tk()
                    u6fenster.title('GUI-Verwaltung')
                    u6fenster.geometry('600x600+500+150')

                    label61 = Label(u6fenster,text="2. 'AUSWAEHLEN EINES KONTOS'", font=('Arial', 10, 'bold underline'))
                    label61.place(relx=.23, rely=.08, anchor="c")
                    label62 = Label(u6fenster,text='2.2. Ausgeben des gewaehlten Kontos', font=('Arial', 9, 'underline'))
                    label62.place(relx=.25, rely=.14, anchor="c")
                    label63 = Label(u6fenster,text='Herzlich willkommen zu DMD-Datasoft \n (...developed by Christian Olling)')
                    label63.place(relx=.2, rely=.94, anchor="c")

                    label64 = Label(u6fenster,text='KONTONUMMER:')
                    label64.place(relx=.47, rely=.2, anchor="e")
                    label65 = Label(u6fenster,text=('ktoNum'))
                    label65.place(relx=.49, rely=.2, anchor="w")

                    label66 = Label(u6fenster,text='VORNAME:')
                    label66.place(relx=.47, rely=.24, anchor="e")
                    label67 = Label(u6fenster,text=('vorname'))
                    label67.place(relx=.49, rely=.24, anchor="w")

                    label68 = Label(u6fenster,text='NACHNAME:')
                    label68.place(relx=.47, rely=.28, anchor="e")
                    label69 = Label(u6fenster,text=('nachname'))
                    label69.place(relx=.49, rely=.28, anchor="w")

                    label600 = Label(u6fenster,text='GEBURTSDATUM:')
                    label600.place(relx=.47, rely=.32, anchor="e")
                    label601 = Label(u6fenster,text=('gebdat'))
                    label601.place(relx=.49, rely=.32, anchor="w")

                    label602 = Label(u6fenster,text='PLZ / WOHNORT:')
                    label602.place(relx=.47, rely=.36, anchor="e")
                    label603 = Label(u6fenster,text=('wohnort'))
                    label603.place(relx=.49, rely=.36, anchor="w")

                    label604 = Label(u6fenster,text='2.3. Anpassen der Arbeits- und Pausenzeiten', font=('Arial', 9, 'underline'))
                    label604.place(relx=.29, rely=.43, anchor="c")

                    label606 = Label(u6fenster,text='ARBEITSSTUNDEN:')
                    label606.place(relx=.47, rely=.5, anchor="e")
                    label607 = Label(u6fenster,text=("(Std.)"))
                    label607.place(relx=.49, rely=.5, anchor="w")

                    eingabe608 = Entry(u6fenster)
                    eingabe608.place(relx=.69, rely=.54, anchor="e")

                    label609 = Label(u6fenster,text=('----->'), fg="red")
                    label609.place(relx=.705, rely=.54, anchor="w")

                    label610 = Label(u6fenster,text=('(Bspw.: 8, 8.75, ...)'))
                    label610.place(relx=.655, rely=.575, anchor="e")

                    label611 = Label(u6fenster,text=('-------------------------------------------------------------------------------------'))
                    label611.place(relx=.5, rely=.62, anchor="c")

                    label612 = Label(u6fenster,text='FRUEHSTUECKSPAUSE:')
                    label612.place(relx=.47, rely=.66, anchor="e")
                    label613 = Label(u6fenster,text=('1. Pause'))
                    label613.place(relx=.49, rely=.66, anchor="w")
                    label614 = Label(u6fenster,text='MITTAGSPAUSE:')
                    label614.place(relx=.47, rely=.7, anchor="e")
                    label615 = Label(u6fenster,text=('2. Pause'))
                    label615.place(relx=.49, rely=.7, anchor="w")

                    def speichernWaehlen(ktoNum,vorname,nachname,gebdat,wohnort,ktoStand,erstePause,zweitePause):
                        print "Diese Funktion nicht weiter beachten :)"

                        def zurueckStunden():
                            u8fenster.destroy()
                            kontoWaehlen()

                        b_81 = Button(u8fenster, text = 'Zurueck zur Kontoauswahl',command=zurueckStunden)
                        b_81.place(relx=.77, rely=.74, anchor="c")

                        b_30 = Button(u7fenster, text = 'Bestaetigen')
                        b_30.place(relx=.78, rely=.75, anchor="c")

                    b_u61 = Button(u6fenster, text = 'Bestaetigen!', fg="red")
                    b_u61.place(relx=.9, rely=.54, anchor="e")

                    b_u62 = Button(u6fenster, text = 'Pausenzeiten aendern')
                    b_u62.place(relx=.9, rely=.68, anchor="e")

                    b_u63 = Button(u6fenster, text = 'Speichern',command=ktoUebergeben)
                    b_u63.place(relx=.9, rely=.77, anchor="e")

                    def zurueckWahlausgabe():
                        u6fenster.destroy()
                        kontoWaehlen()

                    b_u64 = Button(u6fenster, text = ' Zurueck  ',command=zurueckWahlausgabe)
                    b_u64.place(relx=.9, rely=.85, anchor="e")

#---------------Button der die Kontotabelle schliessen soll -------------------------------------------------------------------------------------------------------------------

                b_u51 = Button(u5fenster, text = 'Bestaetigen',command=kontoWahlausgabe)
                b_u51.place(relx=.84, rely=.5, anchor="c")

#-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
                b_u52 = Button(u5fenster, text = 'Konten anzeigen',command=daten)
                b_u52.place(relx=.84, rely=.35, anchor="c")

                def zurueckWaehlen():
                    u5fenster.destroy()
                    hauptStart()

                b_u52 = Button(u5fenster, text = ' Zurueck   ',command=zurueckWaehlen)
                b_u52.place(relx=.84, rely=.8, anchor="c")

            # Button: Konto waehlen --------------------------------------------

            b_h2 = Button(hfenster, text = "   KONTO WAEHLEN    ",font=('Arial', 10, 'bold'),command=kontoWaehlen)
            b_h2.place(relx=.55, rely=.4, anchor="c")

            # Button: alles Beenden --------------------------------------------

            def beenden():
                hfenster.destroy()

            b_h4 = Button(hfenster, text = "         BEENDEN            ",font=('Arial', 10, 'bold'),command=beenden)
            b_h4.place(relx=.55, rely=.6, anchor="c")

            hfenster.mainloop()
        hauptStart()

# Tkinter Klasse --------------------------------------------------------------------------------------------------------------------------------------------------------------

Verwaltung = Verwaltung()
Verwaltung.konto()

ich würde mich sehr über hilfe freuen...

Re: Tkinter und wx.Python....geht das zusammen???

Verfasst: Dienstag 23. Juni 2015, 15:04
von BlackJack
@DMD: Das sieht alles sehr merkwürdig aus. Und ich würde mich auf ein GUI-Toolkit beschränken, denn ob man die tatsächlich mischen kann bezweifle ich.

Re: Tkinter und wx.Python....geht das zusammen???

Verfasst: Dienstag 23. Juni 2015, 18:08
von DMD
ja, hab ich mir schon gedacht :)

das problem is aber leider, dass ich table wegen dem hdf5dll.dll fehler nicht installieren kann.
daher hab ich es so versucht. gibs irgendwo gute anleitungen wie man mit python vernünftige tabellen erstellen kann?

Re: Tkinter und wx.Python....geht das zusammen???

Verfasst: Dienstag 23. Juni 2015, 18:46
von BlackJack
@DMD: Ich vermute Du bringst da einiges durcheinander. Die hdf5.dll hat mit GUIs nichts zu tun, sondern mit dem speichern von hierarchisch organisierten mehrdimensionalen Arraystrukturen. Ein Tabellen-Widget hat eigentlich jedes GUI-Rahmenwerk ausser `Tkinter`. Wieso machst Du die GUI nicht komplett in wxPython?

Re: Tkinter und wx.Python....geht das zusammen???

Verfasst: Mittwoch 24. Juni 2015, 13:37
von DMD
ACH SO.
dann setz ich mich mal ran. ...dachte wx is ausschließlich zur erstellung von tabellen nutze... :)

Re: Tkinter und wx.Python....geht das zusammen???

Verfasst: Mittwoch 24. Juni 2015, 13:38
von DMD
DANKEEEEE

Re: Tkinter und wx.Python....geht das zusammen???

Verfasst: Mittwoch 24. Juni 2015, 13:42
von DMD
könnte ich das nicht auch mit sqlite machen..
da bin ich grad bei. kann man damit auch tabellen erstellen. das wär optimal!
...und bitte sag jetzt, ja das geht!!!

Re: Tkinter und wx.Python....geht das zusammen???

Verfasst: Mittwoch 24. Juni 2015, 13:45
von Kebap
SQL verwaltet Daten in einem Tabellenformat, hilft aber imho nicht dabei, Daten irgendwo als Tabelle anzuzeigen.

Re: Tkinter und wx.Python....geht das zusammen???

Verfasst: Mittwoch 24. Juni 2015, 13:52
von BlackJack
@DMD: Du schmeisst da irgendwie gerade alles in einen Topf was ”Tabelle” genannt werden kann, obwohl das teilweise sehr verschiedene Dinge sind.

Re: Tkinter und wx.Python....geht das zusammen???

Verfasst: Donnerstag 25. Juni 2015, 02:57
von DMD
ich bin totaler anfänger. sorry. ich möchte es gern lernen...

Re: Tkinter und wx.Python....geht das zusammen???

Verfasst: Donnerstag 24. September 2015, 13:14
von Alfons Mittelmeyer
Also, das geht natürlich schon zusammen oder auch auseinander. Nur in der Haupttask sollte tkinter laufen und für wx machst Du dann einen extra Thread. Aber zwei GUI mainloops in einem Thread das solltest Du lassen.

Also in einem File tkinter in der mainloop laufen lassen und in einem anderen File völlig getrennt davon in einem Thread wx.
Und wenn man eh schon zwei getrennte GUIs hat, dann sollte man die Logik hierfür noch in einem extra Thread laufen lassen.

Re: Tkinter und wx.Python....geht das zusammen???

Verfasst: Donnerstag 24. September 2015, 14:08
von BlackJack
@Alfons Mittelmeyer: So natürlich ist das nicht, es kann durchaus Systeme geben bei denen das Fenstersystem nicht darauf ausgelegt ist das ein Prozess da parallel von zwei Threads aus drauf zugreift und sich die beiden GUI-Rahmenwerke dann um ”globale” Ereignisse ringen, d.h. nur eins der beiden bekommt die dann aus der Warteschlange, welches halt zufällig als erstes angefragt hat. Ich sehe auch keinen vernünftigen Grund zwei GUI-Rahmenwerke parallel zu verwenden.

Re: Tkinter und wx.Python....geht das zusammen???

Verfasst: Donnerstag 24. September 2015, 14:57
von Alfons Mittelmeyer
@BlackJack Globale Ereignisse hat es keine zu geben. Es geht nur immer um Ereignisse in dem betreffenden Thread und kein Thread hat auf etwas in einem anderen Thread zuzugreifen. Wenn, dann hat ein Thread ein Ereignis an einen anderen zu melden mit etwaiger Weitergabe von Daten.

Re: Tkinter und wx.Python....geht das zusammen???

Verfasst: Donnerstag 24. September 2015, 15:23
von Sirius3
@Alfons Mittelmeyer: gut, dass Du die beiden beteiligten Frameworks auf allen Plattformen so gut kennst, um das sagen zu können. :evil:

Re: Tkinter und wx.Python....geht das zusammen???

Verfasst: Donnerstag 24. September 2015, 15:52
von Alfons Mittelmeyer
@Sirius3 Ja da hast Du schon recht. Wenn jemand diie Maus bewegt, wer bekommt das dann, tkinter oder wx. Ich würde denken, wenn es ein wxPython Fenster ist, bekommt es wohl wxPython und wenn es ein tkinter Fenster ist, dann wohl tkinter. Wenn es da dann doch Probleme gibt, kann man statt zwei getrennte Threads auch zwei getrennte Anwendungen machen, die über TCP kommunizieren.. Das sollte dann aber problemlos sein.

Re: Tkinter und wx.Python....geht das zusammen???

Verfasst: Donnerstag 24. September 2015, 15:59
von sparrow
Oder, man macht es einfach so, wie es alle anderen tun und entscheidet sich für ein Toolkit. Im besten Fall das, das bereits alle Features hat, die man braucht, und spart sich diese komische Gefrickel. :roll: