Seite 1 von 1
Frame mit Text, welcher sich verändert je nach Resultat
Verfasst: Samstag 24. November 2012, 18:14
von kay2012
Hallo,
ich möchte eine grafische Darstellung, es soll dokumentiert werden, ob die Verbindung zu einer Datenbank geklappt hat. (via mysql.connect)
Die Verbindung aufzubauen ist nicht schwer:
Code: Alles auswählen
import mysql.connector
# Verbindungsdaten zur MYSQL Datenbank und Verbindungsaufbau
connection = mysql.connector.connect(localhost, root, password, dbname)
# Deklaration von 'cursor'
cursor = connection.cursor()
Was wünsche ich mir ?
Das im Fenster angezeigt wird: Verbindung wird hergestellt... (Text ändern sich, wenn Verbindung hergstellt wird in) Verbindung hergestellt (oder falls die Verbindung nicht hergestellt werden konnte in) Verbindung konnte nicht hergestellt werden, Fehler: (errormeldung).
Interessant wären beide Möglichkeiten zu wissen, also wie man es macht das der Text quasi ausgetauscht wird und wie man Zeilen hinzufügen könnte.
Ein Fenster zu erstellen ist in wxypthon nicht schwer, aber wie ich das verbinden kann, das peile ich nicht.
Hat wer von Euch einen Tipp oder ein Beispielcode ?
Vielen Dank im voraus.
Re: Frame mit Text, welcher sich verändert je nach Resultat
Verfasst: Samstag 24. November 2012, 19:02
von BlackJack
@kay2012: Was hast Du denn bis jetzt? Mit welchem Control auch immer Du den Text bisher anzeigst, das wird doch eine Methode zum setzen des Textes haben.
Re: Frame mit Text, welcher sich verändert je nach Resultat
Verfasst: Samstag 24. November 2012, 19:48
von kay2012
Das Fenster habe ich so gemacht:
Code: Alles auswählen
import wx
class DasFenster(wx.Frame):
def __init__(self, parent, id):
wx.Frame.__init__(self, parent, id, 'Das Fenster', size=(300, 200))
panel = wx.Panel(self)
wx.StaticText (panel, -1, 'Mein Text', (20, 20))
if __name__ == '__main__':
app = wx.PySimpleApp()
frame = DasFenster(parent=None, id=-1)
frame.Show()
app.MainLoop()
Re: Frame mit Text, welcher sich verändert je nach Resultat
Verfasst: Sonntag 25. November 2012, 12:25
von kay2012
kann ich das in etwas so machen (um das ganze erstmal ohne frame) hinzubekommen:
Code: Alles auswählen
import mysql.connector
# Klasse zum Aufbau der Datebankverbindung
class Verbindungsaufbau:
def dbverbindung(self):
try:
dbverbindung = mysql.connector.connect (localhost, user, pw, test)
except:
Print="Verbindung konnte nicht hergstellt werden: "
else:
Print="Verbindung hergestellt!"
Re: Frame mit Text, welcher sich verändert je nach Resultat
Verfasst: Sonntag 25. November 2012, 13:50
von BlackJack
@kay2012: Der Verbindungsaufbau ist kein „Ding” sondern ein Vorgang, deshalb ist eine Klasse da schon mal fragwürdig. In dem Quelltext wird in der ”Methode”, die semantisch gar keine ist, ja auch gar kein Gebrauch davon gemacht, dass es eine Klasse ist.
Minimal müsste das was da steht in eine Methode oder Funktion die vom GUI-Code aufgerufen wird, und dort müsste man dann auch die Texte wieder in der GUI anzeigen, oder zumindest die entsprechenden Schritte anstossen. Dann hätte man aber sehr wahrscheinlich keine wirklich gute Trennung zwischen Geschäftslogik und GUI. Ausserdem müsste man den Verbindungsaufbau asynchron durchführen, damit der die GUI nicht blockiert falls er länger dauert. Dann wird das Ganze richtig kompliziert. IMHO zu kompliziert für einen Anfänger. Ich würde raten erst einmal die Geschäftslogik zu implementieren und vor allem zu testen und dann erst eine GUI dort drauf zu setzen.
Re: Frame mit Text, welcher sich verändert je nach Resultat
Verfasst: Sonntag 25. November 2012, 14:21
von kay2012
Hab mir nun nochmal ein Tutorial zu Gemüte geführt:
http://dev.mysql.com/doc/connector-pyth ... cting.html
Der darin enthalten CodeSnippet ist schon ganz okay, der Aufbau zur Datenbank (inkl. Fehlermeldungen) sind hier nun vorhanden:
Code: Alles auswählen
import mysql.connector
from mysql.connector import errorcode
import time
try:
cnx = mysql.connector.connect(host='localhost', user='username', password='kennwort', database='datenbankname')
except mysql.connector.Error as err:
if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
print("Benutzername oder Passwort falsch !")
elif err.errno == errorcode.ER_BAD_DB_ERROR:
print("Datenbank existiert nicht !")
else:
print("Verbindung steht!")
time.sleep(5)
print("Verbindung wird nun beendet!")
time.sleep(2)
cnx.close()
Unten habe ich noch timesleep gemacht, damit man auch visuell das ende der Verbindung mitbekommt.
Soweit sogut, und das ganze möchte ich in einem Frame packen. Nur weiß ich nicht wie.
Re: Frame mit Text, welcher sich verändert je nach Resultat
Verfasst: Sonntag 25. November 2012, 15:02
von BlackJack
@kay2012: So kommen wir, und insbesondere Du nicht weiter. Du hast da jetzt ein Beispiel aus einem Tutorial (unvollständig) abgeschrieben und (geringfügig) erweitert. Alles auf Modulebene. Das ist sicher nicht die Geschäftslogik Deines Programms. Dazu ist es etwas zu dünn und auch nicht wirklich flexibel verwendbar so auf Modulebene, selbst ohne GUI. Um ein GUI-Programm zu schreiben muss man seinen Code mindestens sinnvoll in Funktionen strukturieren. IMHO sollte man besser schon objektorientierte Programmierung halbwegs drauf haben, bevor man sich mit GUIs und der damit einhergehenden Komplexität *zusätzlich* auseinander setzt. Und in diesem Fall kommen dann noch möglicherweise blockierende, externe Anhängigkeiten durch die Datenbank hinzu, also nebenläufige Programmierung wenn man das ordentlich implementieren möchte — was an sich schon ein zusätzliches komplexes Thema ist, aber durch GUIs noch einmal verschärft wird, weil die in der Regel nicht „thread safe” sind und weitere Einschränkungen auferlegen.
Die API, die Du für die Datenbankanbindung verwendest ist übrigens ziemlich speziell. Die ist auf MySQL beschränkt. Normalerweise würde man mindestens die für die Sprache übliche abstrakte API für relationale Datenbanken verwenden. In diesem Fall also die DB API 2.0. Allgemein wird heutzutage aber SQLAlchemy als Abstraktionsschicht in Python empfohlen.
Re: Frame mit Text, welcher sich verändert je nach Resultat
Verfasst: Sonntag 25. November 2012, 15:25
von kay2012
Ich werde mir dieThematik, insbesondere Funktionen, Klassen und Methoden nochmal genauer ansehen, ich glaub das war ein wenig überstürzt.
Danke für die Ratschläge.