Я обнаружил, что когда требуется расширенный пользовательский ввод, лучшим вариантом может быть графический интерфейс.Я пытаюсь вводить данные только из командной строки, если мой сценарий использует небольшое количество пользовательских данных, которые я могу аргументировать.Лично я бы сделал комбобокс tkinter для каждого из этих входов и имел бы кнопку внизу GUI, которая обрабатывает все входы и записывает их в файл.Вот скелет того, как я делаю GUI
import tkinter as tk
class OOP:
def __init__(self):
self.win = tk.Tk()
self.win.title("My Title")
self.user_input = tk.StringVar()
self.create_widgets()
def lookup_csv_file(self):
file = self.user_input.get()
print(file)
def create_widgets(self):
tk.Button(self.win, text="Lookup CSV file", width=42, command=self.lookup_csv_file).pack(expand=1, fill='both')
tk.Entry(self.win, textvariable=self.user_input).pack(expand=1, fill='both')
app = OOP()
app.win.mainloop()
Этот код показывает несколько важных моментов, на которые следует обратить внимание:
1) В большинстве случаев GUI следует создавать с помощью объектно-ориентированного программирования (OOP)
2) Переменные, которые вы хотите сохранить, должны быть инициализированы в разделе __init__
как tk.StringVar (), tk.IntVar () и т. Д., А затем присоединены к разделам графического интерфейса пользователя (как показано в *Раздел 1009 *. Текстовая переменная записи присоединена к нашей переменной
3) Для доступа к переменной вы используете ее метод .get (), как показано в разделе lookup_csv_file
.Также переменная имеет метод .set (), если вы хотите поместить туда значение.Например, вы можете выполнить self.user_input = tk.StringVar()
, а затем self.user_input.set('Default CSV file')
, и графический интерфейс будет инициализирован с показанным на рисунке.
4) При назначении команд кнопкам не включайте ()
.Если вместо command=self.lookup_csv_file
вы поставите command=self.lookup_csv_file()
, команда будет выполняться во время инициализации.
Это некоторые из тонких моментов, которые мне было трудно выучить, но с этим вы сможете быстро научиться,просматривая имеющуюся документацию!