我必须为学校编写一个游戏。我决定在Pygame中对其进行编码,但是我决定在tkinter中创建一个“设置”窗口。问题在于,当我执行代码时,它有两个tkinter:我想要的一个和空白的GUI。
我应该怎么做才能解决此问题?
谢谢!
import tkinter
import shutil
class Options(tkinter.Tk):
def __init__(self):
root = tkinter.Tk()
root.maxsize(300,200)
root.minsize(300,200)
root.title('Difficulté du jeu')
tkinter.Tk.__init__(self)
tkinter.Label(root, 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()
tkinter.Label(root, text= 'Facile ------------ Classique -------------Débutant').pack()
g_slider_value = 0
slider = tkinter.Scale(root, orient = tkinter.HORIZONTAL, length = 300, width = 20, sliderlength = 60, from_ = 45, to = 20, command = self.get_slider)
slider.pack()
self.slider = slider
tkinter.Button(root, text='Enregistrer la valeur', command=self.show_values).pack()
tkinter.Button(root, text='Quitter', command=root.destroy).pack()
def get_slider(self, event):
g_slider_value = self.slider.get()
print(g_slider_value)
def show_values(self):
monFichiersource = open('para.txt', 'r')
monFichiersource.readline()
#celà permet de créer le fichier tout d'abord pour ensuite supprimer la première ligne si elle existe
monFichiercible = open('para.txt', 'w')
shutil.copyfileobj(monFichiersource, monFichiercible)
#permet d'écraser les données de l'ancien fichier avec un nouveau vide
monFichier=open('para.txt','a') #on ouvre le répertoire texte
monFichier.write(str(self.slider.get())) #on ajoute la valeur du slider
monFichier.close() #on ferme le fichier
print('Paramètre enregistré.')
Options().mainloop()
答案 0 :(得分:0)
好吧,所以您将将tkinter窗口的两种构建方法结合在一起。有一种非OOP方法不使用类,通常您将Tk()
定义为root并使用函数进行构建,然后有一种类方法通常从Tk()
继承并构建gui使用类的属性和方法。
让我们修正您的代码。
您永远不想在tkinter中多次呼叫Tk()
。您看到2个窗口的原因是,您的班级和__init__
内部都在调用Tk()
。
您也不会关闭打开的3个文件中的2个,因此可以考虑使用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()