Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
INI Configuration GUI
#1
I am using Python38. I have been assigned to write a gui to edit the configuration ini file for an existing program. I have cobbled together a program which works fairly well, but when I save back to the ini file, quotes and spaces are added. My question is how do I save the text back to the ini file in the original format, ie. no extra quotes, spaces, etc...
import tkinter
import tkinter as tk  # gives tk namespace
from tkinter import *
from tkinter.scrolledtext import *
import tkinter.filedialog
import tkinter.messagebox
import configparser
import string
parser = configparser.ConfigParser()

root = tkinter.Tk(className="Create and Edit Config File")
textPad = ScrolledText(root, width=100, height=30)
task_list = tk.Listbox(root, width=50, height=6)

config = configparser.ConfigParser()
config.read('Administration.ini')

UserList = (config.get('VARIABLES', 'USERS').split(','))
UserList = [i.strip('[]') for i in UserList]
UserList = [i.strip("{}") for i in UserList]
UserList = [i.strip('"') for i in UserList]
UserList = [i.strip("'") for i in UserList]
print(UserList)

SystemList = (config.get('VARIABLES', 'SYSTEMS').split(','))
SystemList = [i.strip('{}') for i in SystemList]

DeploymentList = (config.get('VARIABLES', 'DEPLOYMENTS').split(','))
List = [i.strip('{}') for i in DeploymentList]


def open_task():
##    fin = tkinter.filedialog.askopenfile(mode='rb',title='Select administration Config file')
##    if fin is not None:
##        task_listread = fin.readlines()
##
    for item in UserList:
            task_list.insert(tk.END, item)
##            fin.close()

def exit():
    if tkinter.messagebox.askokcancel("Quit", "Do you really want to quit?"):
        root.destroy()

def about():
    label = tkinter.messagebox.showinfo("About", "To do List py experiment")


def new_task():
    task_list.insert(tk.END, input.get())
    UserList.append(input.get())
    print(UserList)

def delete_item():
    """
    delete a selected line from the listbox
    """
    try:
    # get selected line index
        index = task_list.curselection()[0]
        task_list.delete(index)
    except IndexError:
        pass


def get_list(event):
    """
    function to read the listbox selection
    and put the result in an entry widget
    """
    # get selected line index
    index = task_list.curselection()[0]
    # get the line's text
    seltext = task_list.get(index)
    # delete previous text in input
    input.delete(0, 50)
    # now display the selected text
    input.insert(0, seltext)

def set_list(event):
    """
    insert an edited line from the entry widget
    back into the listbox
    """
    try:
        index = task_list.curselection()[0]
    # delete old listbox line
        task_list.delete(index)
    except IndexError:
        index = tk.END
    # insert edited item back into task_list at index
        task_list.insert(index, input.get())


def save_tasks():
    config.set('VARIABLES' , 'USERS' , str(UserList))
    with open('Administration.ini', "w") as config_file:
        config.write(config_file)
##    """
##    save the current listbox contents to a file
##    """
##    # get a list of listbox lines
##    temp_list = list(task_list.get(0, tk.END))
##    # add a trailing newline char to each line
##    temp_list = [task + '\n' for task in temp_list]
##    # give the file a different name
##
##    if temp_list is not None:
##        fout = tkinter.filedialog.asksaveasfile(mode='w')
##        fout.writelines(temp_list)
##        fout.close()

menu = Menu(root)
root.config(menu=menu)

filemenu = Menu(menu)
menu.add_cascade(label="File", menu=filemenu)
filemenu.add_command(label="Open Task File", command=open_task)
filemenu.add_command(label="Save", command=save_tasks)
filemenu.add_separator()
filemenu.add_command(label="Exit", command=exit)

helpmenu = Menu(menu)
menu.add_cascade(label="Help", menu=helpmenu)
helpmenu.add_command(label="About ", command=about)

# create the listbox (note that size is in characters)
#task_list = tk.Listbox(root, width=50, height=6)
task_list.grid(row=0, column=0)

# create a vertical scrollbar to the right of the listbox
yscroll = tk.Scrollbar(command=task_list.yview, orient=tk.VERTICAL)
yscroll.grid(row=0, column=1, sticky=tk.N+tk.S)
task_list.configure(yscrollcommand=yscroll.set)

#task_list.bind("<<ListboxSelect>>", printer)

# use entry widget to display/edit selection
input = tk.Entry(root, width=50)
input.insert(0, 'Write Your Task here')
input.grid(row=1, column=0)
# pressing the enter key will update edited line
input.bind('<Return>', set_list)

#This button is used to add tasks
button_add_task = tk.Button(root, text='Add entry text to listbox', command=new_task)
button_add_task.grid(row=2, column=0, sticky=tk.E)

#This Button is used to call the delete function
button_delete = tk.Button(root, text='Delete selected Task     ', command=delete_item)
button_delete.grid(row=3, column=0, sticky=tk.E)

# left mouse click on a list item to display selection
task_list.bind('<ButtonRelease-1>', get_list)

root.mainloop()
Reply
#2
Is there a reason you care about the specific spaces? When configparser reads it, it just grabs all the data and forgets about extra spaces that were used.

But putting in extra spaces is the default. You can turn that off with

        config.write(config_file, space_around_delimiters=False)
Reply
#3
I am not so concerned about the spaces but rather the quotes added. Each time the file is edited, more quotes are added.
Reply
#4
Can you give an example key/value from before and after?
Reply
#5
Before:
[VARIABLES]
users=[[email protected],[email protected]]

After:
[VARIABLES]
users=['[email protected]', '[email protected]', '[email protected]']

Second Edit:
[VARIABLES]
users=['[email protected]', " '[email protected]", " '[email protected]", " '[email protected]"]
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Python modules for accessing the configuration of relevant paths Imago 1 1,362 May-07-2022, 07:28 PM
Last Post: Larz60+
  Read Yaml configuration file in Python binhduonggttn 1 2,071 Feb-11-2020, 05:43 AM
Last Post: ndc85430
  Geany Configuration twallace51 0 4,491 Apr-21-2019, 02:20 PM
Last Post: twallace51
  help to execute a py code and good configuration andrebo 2 2,626 Sep-11-2018, 01:00 PM
Last Post: snippsat
  Geany configuration help mlytle0 4 10,866 Sep-04-2017, 04:18 AM
Last Post: mlytle0
  Postgresql and Django Configuration with Wamp Adelton 5 5,685 Mar-26-2017, 07:15 PM
Last Post: Larz60+

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020