From 82fb45bac50bd740ed4118621027ec63582a51fe Mon Sep 17 00:00:00 2001 From: emkael Date: Sun, 2 Jun 2019 21:01:41 +0200 Subject: Moving MySQL configuration frame to separate widget --- jfr_playoff/gui/frames/network.py | 76 +++++++++++++++++++++++++++++++++++++++ jfr_playoff/gui/tabs.py | 61 +++---------------------------- 2 files changed, 80 insertions(+), 57 deletions(-) create mode 100644 jfr_playoff/gui/frames/network.py (limited to 'jfr_playoff') diff --git a/jfr_playoff/gui/frames/network.py b/jfr_playoff/gui/frames/network.py new file mode 100644 index 0000000..14deaa0 --- /dev/null +++ b/jfr_playoff/gui/frames/network.py @@ -0,0 +1,76 @@ +#coding=utf-8 + +import tkinter as tk +from tkinter import ttk +import tkMessageBox as tkmb + +from ...db import PlayoffDB +from ..frames import getIntVal + +class MySQLConfigurationFrame(tk.Frame): + def __init__(self, *args, **kwargs): + tk.Frame.__init__(self, *args, **kwargs) + self.renderContent(self) + + def getConfig(self): + if len(self.host.get().strip()): + return { + 'host': self.host.get().strip(), + 'port': getIntVal(self.port, default=3306), + 'user': self.user.get().strip(), + 'pass': self.pass_.get().strip() + } + return None + + def _testDB(self): + try: + dbConfig = self.getConfig() + if dbConfig is None: + raise AttributeError('Database not configured') + db = PlayoffDB(dbConfig) + self.dbError = None + self.dbTestLabel.configure(text='✓') + self.dbTestLabel.configure(foreground='green') + except Exception as e: + self.dbError = unicode(e) + self.dbTestLabel.configure(text='✗') + self.dbTestLabel.configure(foreground='red') + + def _dbError(self, event): + if self.dbError is not None: + tkmb.showerror('Błąd połączenia z bazą danych', self.dbError) + + def renderContent(self, container): + (ttk.Label(container, text='Ustawienia MySQL')).grid( + row=0, column=0, columnspan=4, sticky=tk.E+tk.W) + (ttk.Label(container, text='Host:')).grid( + row=1, column=0, sticky=tk.E) + self.host = tk.StringVar() + (ttk.Entry(container, textvariable=self.host)).grid( + row=1, column=1, sticky=tk.E+tk.W) + (ttk.Label(container, text='Port:')).grid( + row=1, column=2, sticky=tk.E) + self.port = tk.StringVar() + self.port.set(3306) + (tk.Spinbox( + container, textvariable=self.port, width=5, + from_=0, to=65535)).grid(row=1, column=3, sticky=tk.W) + (ttk.Label(container, text='Użytkownik:')).grid( + row=2, column=0, sticky=tk.E) + self.user = tk.StringVar() + (ttk.Entry(container, textvariable=self.user)).grid( + row=2, column=1, sticky=tk.E+tk.W) + (ttk.Button( + container, text='Testuj ustawienia', command=self._testDB)).grid( + row=2, column=3) + self.dbError = None + self.dbTestLabel = ttk.Label(container) + self.dbTestLabel.grid(row=2, column=4) + self.dbTestLabel.bind('', self._dbError) + (ttk.Label(container, text='Hasło:')).grid( + row=3, column=0, sticky=tk.E) + self.pass_ = tk.StringVar() + (ttk.Entry(container, textvariable=self.pass_, show='*')).grid( + row=3, column=1, sticky=tk.E+tk.W) + +__all__ = ['MySQLConfigurationFrame'] diff --git a/jfr_playoff/gui/tabs.py b/jfr_playoff/gui/tabs.py index ecb7ab8..62054bf 100644 --- a/jfr_playoff/gui/tabs.py +++ b/jfr_playoff/gui/tabs.py @@ -9,6 +9,7 @@ import tkMessageBox as tkmb from .frames import getIntVal from .frames.team import * +from .frames.network import * from ..data import PlayoffData from ..db import PlayoffDB @@ -165,65 +166,11 @@ class NetworkTab(PlayoffTab): return 'Sieć' def getDB(self): - if len(self.host.get().strip()): - return { - 'host': self.host.get().strip(), - 'port': getIntVal(self.port, default=3306), - 'user': self.user.get().strip(), - 'pass': self.pass_.get().strip() - } - return None - - def _testDB(self): - try: - dbConfig = self.getDB() - if dbConfig is None: - raise AttributeError('Database not configured') - db = PlayoffDB(dbConfig) - self.dbError = None - self.dbTestLabel.configure(text='✓') - self.dbTestLabel.configure(foreground='green') - except Exception as e: - self.dbError = unicode(e) - self.dbTestLabel.configure(text='✗') - self.dbTestLabel.configure(foreground='red') - - def _dbError(self, event): - if self.dbError is not None: - tkmb.showerror('Błąd połączenia z bazą danych', self.dbError) + return self.mysqlFrame.getConfig() def renderContent(self, container): - (ttk.Label(container, text='Ustawienia MySQL')).grid( - row=0, column=0, columnspan=4, sticky=tk.E+tk.W) - (ttk.Label(container, text='Host:')).grid( - row=1, column=0, sticky=tk.E) - self.host = tk.StringVar() - (ttk.Entry(container, textvariable=self.host)).grid( - row=1, column=1, sticky=tk.E+tk.W) - (ttk.Label(container, text='Port:')).grid( - row=1, column=2, sticky=tk.E) - self.port = tk.StringVar() - self.port.set(3306) - (tk.Spinbox( - container, textvariable=self.port, width=5, - from_=0, to=65535)).grid(row=1, column=3, sticky=tk.W) - (ttk.Label(container, text='Użytkownik:')).grid( - row=2, column=0, sticky=tk.E) - self.user = tk.StringVar() - (ttk.Entry(container, textvariable=self.user)).grid( - row=2, column=1, sticky=tk.E+tk.W) - (ttk.Button( - container, text='Testuj ustawienia', command=self._testDB)).grid( - row=2, column=3) - self.dbError = None - self.dbTestLabel = ttk.Label(container) - self.dbTestLabel.grid(row=2, column=4) - self.dbTestLabel.bind('', self._dbError) - (ttk.Label(container, text='Hasło:')).grid( - row=3, column=0, sticky=tk.E) - self.pass_ = tk.StringVar() - (ttk.Entry(container, textvariable=self.pass_, show='*')).grid( - row=3, column=1, sticky=tk.E+tk.W) + self.mysqlFrame = MySQLConfigurationFrame(container) + self.mysqlFrame.pack(side=tk.TOP, fill=tk.BOTH, expand=True) class VisualTab(PlayoffTab): @property -- cgit v1.2.3