Хорошо, так что вы объединяете 2 метода построения окна tkinter в один.Есть метод, отличный от ООП, который не использует класс, в котором вы обычно определяете Tk()
как root и строите с использованием функций, а затем есть метод класса, где вы обычно наследуете от Tk()
и строите свой графический интерфейс с использованием атрибутов класса иметоды.
Позволяет исправить ваш код.
Вы никогда не захотите вызывать Tk()
более одного раза в tkinter.Причина, по которой вы видите 2 окна, заключается в том, что и ваш класс, и внутри __init__
вызывают Tk()
.
Вы также не закрываете 2 из 3 открытых вами файлов, поэтому, возможно, стоит рассмотреть возможность использования with open()
вместоopen()
как метод with open()
закроется автоматически.
Вот ваш код очищен.
import tkinter as tk
import shutil
class Options(tk.Tk):
def __init__(self):
super().__init__()
self.maxsize(300, 200)
self.minsize(300, 200)
self.title('Difficulté du jeu')
tk.Label(self, text='Avant de démarrer, merci de selectionner'
'\n une difficulté ou bien fermer la fenêtre pour restaurer'
'\n les paramètres pérécdents. \n \n').pack()
tk.Label(self, text='Facile ------------ Classique -------------Débutant').pack()
g_slider_value = 0
slider = tk.Scale(self, orient=tk.HORIZONTAL, length=300, width=20, sliderlength=60, from_=45, to=20,
command=self.get_slider)
slider.pack()
self.slider = slider
tk.Button(self, text='Enregistrer la valeur', command=self.show_values).pack()
tk.Button(self, text='Quitter', command=self.destroy).pack()
def get_slider(self, event):
g_slider_value = self.slider.get()
print(g_slider_value)
def show_values(self):
with open('para.txt', 'r') as monFichiersource:
monFichiersource.readline()
with open('para.txt', 'w') as monFichiercible:
shutil.copyfileobj(monFichiersource, monFichiercible)
with open('para.txt', 'a') as monFichier:
monFichier.write(str(self.slider.get()))
print('Paramètre enregistré.')
Options().mainloop()