执行时额外的空白tkinter GUI

2024-10-01 00:23:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须为学校编写一个游戏。我决定在Pygame中编写它,但我决定在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()

Tags: textselfgetvaluetkinterdefderoot
1条回答
网友
1楼 · 发布于 2024-10-01 00:23:34

好的,那么您将两种方法组合在一起构建tkinter窗口。有一种非OOP方法,它不使用通常将Tk()定义为根并使用函数构建的类,还有一种类方法,通常从Tk()继承并使用类属性和方法构建gui

让我们来修正你的代码

您永远不希望在一个tkinter中多次调用Tk()。您看到2个窗口的原因是,您的类和内部__init__都在调用Tk()

您还没有关闭您打开的3个文件中的2个,因此可能考虑使用^ {CD6>}而不是^ {< CD7>},因为^ {CD6>}方法将自动关闭。

这是你的代码清理

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()

相关问题 更多 >