Use Tkinter instead of easygui for the settings dialog.

This commit is contained in:
Anna Rose Wiggins 2016-01-23 22:14:41 -05:00
parent 5b959aa87f
commit c93cf8e1e6
2 changed files with 73 additions and 41 deletions

View file

@ -1,6 +1,7 @@
from ConfigParser import ConfigParser
import os
import easygui
import Tkinter as tk
import tkSimpleDialog, tkMessageBox
import platform
def get_config_dir(make=False):
@ -11,7 +12,7 @@ def get_config_dir(make=False):
return os.path.join(os.path.expanduser('~'), config_suffix)
def get_settings(use_gui=True):
def get_settings(use_gui=True, parent=None):
"""
Try to read the settings from file into ConfigParser object.
If the config file isn't found, initialize it.
@ -27,16 +28,18 @@ def get_settings(use_gui=True):
except:
pass
settings = init_settings(use_gui)
settings = update_settings(use_gui, parent)
return settings
def init_settings(gui=True):
settings = ConfigParser()
settings.add_section('ed_companion')
settings.add_section('inara')
def update_settings(gui=True, parent=None, settings=None):
if settings is None:
settings = ConfigParser()
settings.add_section('ed_companion')
settings.add_section('inara')
if gui:
_settings_prompt_gui(settings)
dialog = ConfigDialog(parent, settings)
else:
_settings_prompt_cli(settings)
print "To change these settings later, edit " + filename
@ -46,29 +49,57 @@ def init_settings(gui=True):
return settings
def _settings_prompt_gui(settings):
data = []
data = easygui.multenterbox(
"Enter your E:D and Inara credentials. You only need to do this once.",
"Authentication Data",
["Elite Username (email address)", "Elite Password",
"Inara Username", "Inara Password"]
)
for i in range(4):
if data[i].strip() == '':
easygui.msgbox("You must provide data for all fields.")
_settings_prompt_gui(settings)
return
settings.set('ed_companion', 'username', data[0].strip())
settings.set('ed_companion', 'password', data[1].strip())
settings.set('inara', 'username', data[2].strip())
settings.set('inara', 'password', data[3].strip())
def _settings_prompt_cli(settings):
settings.set('ed_companion', 'username', raw_input("Elite Username (email address): "))
settings.set('ed_companion', 'password', raw_input("Elite Password: "))
settings.set('inara', 'username', raw_input("Inara Username: "))
settings.set('inara', 'password', raw_input("Inara Password: "))
class ConfigDialog(tkSimpleDialog.Dialog):
def __init__(self, parent, settings, title="Authentication Data"):
self.settings = settings
self.entries = []
self.data = []
tkSimpleDialog.Dialog.__init__(self, parent, title)
def body(self, parent):
i = 0
values = []
for section, value in (('ed_companion', 'username'),
('ed_companion', 'password'),
('inara', 'username'),
('inara', 'password')):
if self.settings.has_option(section, value):
values.append(self.settings.get(section, value))
else:
values.append("")
for field in ("Elite Username (email address):",
"Elite Password:",
"Inara Username:",
"Inara Password:"):
label = tk.Label(parent, text=field)
label.grid(row=i, column=0, sticky=tk.W)
entry = tk.Entry(parent, width=30)
entry.insert(0, values[i])
entry.grid(row=i, column=1, sticky=tk.E)
self.entries.append(entry)
i += 1
return self.entries[0]
def validate(self):
for entry in self.entries:
if entry.get().strip() == "":
tkMessageBox.showwarning("Missing Data",
"You must provide a value for every field.")
return False
return True
def apply(self):
self.settings.set('ed_companion', 'username', self.entries[0].get().strip())
self.settings.set('ed_companion', 'password', self.entries[1].get().strip())
self.settings.set('inara', 'username', self.entries[2].get().strip())
self.settings.set('inara', 'password', self.entries[3].get().strip())