私はtkinterには新しく、「エントリ」、画像付きのキャンバス、ボタンでtkinterインターフェイスを作成したいと考えています。私は1つのtkウィンドウしか期待していませんでしたが、私のコードを実行すると2番目の小さな空のtkウィンドウがあります。私はそれがために私が使用したクラスであると思いますが、私はわからないんだけど...。ここ が私のコードです:1つではなく2つのtkウィンドウ
from tkinter import*
import tkinter as tk
import time
class Application(Tk):
def __init__(self,transfo,nb_itération):
Tk.__init__(self)
self.transfo = transfo
self.nb_itération = nb_itération
def affichage_graphique(self):
self.matrix_hex = extraction_rgb(tk.PhotoImage(file='obama_128.gif'))
self.width , self.height = len(self.matrix_hex[0]) , len(self.matrix_hex)
self.WIDTH, self.HEIGHT = 8*self.width+6, 8*self.height+6
self.cnv = Canvas(self, width=self.WIDTH, height=self.HEIGHT, bg='white',highlightthickness=0)
self.cnv.grid(row = 2 , columnspan = 3)
self.txt1 = Label(self, text = 'Transformation :').grid(row = 0 , sticky = E)
self.txt2 = Label(self, text = 'Nombre d\'itérations : ').grid(row = 1 , sticky = E)
self.entr1 = Entry(self)
self.entr2 = Entry(self)
self.entr1.grid(row = 0, column = 1, sticky = W)
self.entr2.grid(row = 1, column = 1, sticky = W)
Button(self, text="Quitter", command=self.destroy).grid(row = 0 , column = 2)
if self.transfo == photomaton or self.transfo == boulanger:
print("valeur par défaut mauvaise")
self.cnv.delete(ALL)
self.img01 = self.PhotoImage(width=self.width*4, height=self.height*4)
self.img = self.PhotoImage(width=self.width*4, height=self.height*4)
self.matrix_hex4 = [[x for x in range(self.width*4)] for y in range(self.height*4)]
self.matrix_4 = [[x for x in range(self.width*4)] for y in range(self.height*4)]
self.img.put(data=self.matrix_4 , to=(0,0))
self.cnv.create_image(0, 0, image=self.img, anchor=tk.NW)
self.img01.put(data=self.matrix_hex4, to=(0,0))
self.cnv.create_image(self.WIDTH, 0, image=self.img01, anchor=tk.NE)
self.cnv.bind('<Button-1>',self.click_handler)
else:
self.img = tk.PhotoImage(width=self.width*4, height=self.height*4)
self.img.put(data=self.matrix_4 , to=(0,0))
self.cnv.create_image(0, 0, image=self.img, anchor=tk.NW)
self.entr1.insert(0,"photomaton")
self.entr2.insert(0,"1")
self.entr2.bind("<Return>",Programme().Enter)
class Programme(Application):
def __init__(self,transfo = 0, nb_itération = 0 ,orbites =[],période = []):
self.choice = 0
self.orbites = orbites
self.période = période
self.transfo = transfo
self.nb_itération = nb_itération
Application.__init__(self, self.transfo , self.nb_itération)
def Enter(self,event):
self.choix_transfo = self.entr1.get()
self.nb_itération = self.entr2.get()
return self.choix_transfo , self.nb_itération
def start(self):
self.affichage_graphique()
prog = Programme()
prog.start()
prog.mainloop()
、[最小、コンプリートを投稿してください、および検証可能な例](https://stackoverflow.com/help/mcve)を参照してください。例えば、 'Program .__ init__'は引数リストの後にコロンがありません。また、 'Program .__ init__'には無限の再帰があります。 – FamousJameous
私は、(a)あなたは 'Tk'を拡張するいくつかのクラスを持っているか、(b)' Tk'を拡張する一つのクラスを持っていて、 '' root ''Tk'インスタンスを手動で作成すると思います。あなたのコードにエラー(構文と実行時)があるので、チェックすることはできません。私は 'Tk'を全く拡張しないことをお勧めします。 –
2つのウィンドウを作成するコードはありません。しかし、私はあなたの 'Program()'の使用を見ていますが、その名前でクラスや関数はありません。あなたは 'Program'という名前のクラスを持っています - それらのタイプミスの1つですか? –