2016-12-11 5 views
-2

私はPythonで小さなGUIアプリケーションを開発してきましたが、ウィジェットを手に入れることはできません私の間違いを指摘できる人はいますか?プログラムは動作しますが、空のウィンドウだけが表示され、ウィジェットは表示されません。Python(Tkinter):私の人生では私のウィジェットをウィンドウに表示することはできません

import tkinter as tk 

class application(tk.Frame): 
    def _init_(self, parent): 
     tk.Frame._init_(self) 
     self.createWidgets() 
     self.generateText() 

    def createWidgets(self): 
     self.grid() 

     self.stars = tk.StringVar() 
     self.textBox = tk.Label(self, textvariable= self.stars) 

     self.firstVar = tk.StringVar() 
     self.checkBox1 = tk.CheckButton(self, text='Have you finished sweeping and mopping?', 
      variable=self.firstVar, onvalue='yes', offvalue='no') 

     self.secondVar = tk.StringVar() 
     self.checkBox2 = tk.CheckButton(self, text='Have you finished preparing food?', 
      variable=self.secondVar, onvalue='yes', offvalue='no') 

     self.thirdVar = tk.StringVar() 
     self.checkBox3 = tk.CheckButton(self, text='Have you finished mowing the lawn?', 
      variable=self.thirdVar, onvalue='yes', offvalue='no') 

     self.textBox.grid(column=1, row=0) 
     self.checkBox1.grid(column=1, row=1) 
     self.checkBox2.grid(column=1, row=2) 
     self.checkBox3.grid(column=1, row=3) 

    def generateText(self): 
     if self.firstVar.get() is 'yes': 
      self.stars.set('Here, have a gold star') 

     if self.secondVar.get() is 'yes': 
      self.stars.set('Nice!, have a gold star') 

     if self.thirdVar.get() is 'yes': 
      self.stars.set('Good job, have a gold star') 

     if (self.firstVar.get() is 'yes' and self.secondVar.get() is 'yes' and self.thirdVar.get() is 'yes'): 
      self.stars = 'You have 3 gold stars, what a good boy.' 




app = application(None) 
app.master.title('1.3 TKinter implementation') 
app.mainloop() 
+0

として宣言されている最大の問題は、あなたが '_init_'(各側に1つのアンダースコア)を使用しているということですが、それは' __init__'でなければなりませんが判明(各側に2つのアンダースコア) –

答えて

1

MCVEの作成について読んでください。私はそのようにしたと少ない気が散るの線と、複数のエラーが見つかりました:

import tkinter as tk 
root = tk.Tk() 

class application(tk.Frame): 
    def __init__(self, parent): 
     tk.Frame.__init__(self, parent) 
     self.grid() 

     self.stars = tk.StringVar(parent, 'something') 
     self.textBox = tk.Label(self, textvariable= self.stars) 
     self.textBox.grid(column=1, row=0) 

app = application(root) 
root.title('1.3 TKinter implementation') 
root.mainloop() 

__init__は2重のアンダースコアを持っています。 `StringVarsは他のものと同じ親を持つ必要があります。デフォルトルートに応じて、問題が発生します。アプリケーションは明示的に1つのルートを明示的に作成し、ルートに直接置かれたすべてのフォント、Vars、Toplevel、ウィジェットに使用する必要があります。その後、期待どおりに動作します。

+0

あなたが言ったすべてのコードを修正しました:トレースバック(最新のコール最後): ファイル "C:/Users/Julio/Desktop/project1_3.py"、45行目、 (self、text = 'あなたはスイープを完了しましたか?); app = application(root) ファイル "C:/Users/Julio/Desktop/project1_3.py"、14行目、__init__ self.checkBox1 = tk.CheckButtonモップ? '、 AttributeError:モジュール 'tkinter'に 'CheckButton'属性がありません 終了コード1で処理が終了しました – jfajardo

0

私はしばらく時間がかかりましたが、最終的にプログラムを修正しました。チェックボタンがCheckButtonとして宣言されていない、それはCheckbutton -_-

import tkinter as tk 
root = tk.Tk() 

class application(tk.Frame): 

    def genMessage(self): 

     if self.firstVar.get() == 1: 
      self.stars.set('You have 1 gold star') 

     if self.secondVar.get() == 1: 
      self.stars.set('Nice!, you have 1 gold star') 

     if self.thirdVar.get() == 1: 
      self.stars.set('Good job!, you have 1 gold star') 

     if (self.firstVar.get() == 1 and self.secondVar.get() == 1) or (self.firstVar.get() == 1 and self.thirdVar.get() == 1) or (self.secondVar.get() == 1 and self.thirdVar.get() == 1): 
      self.stars.set('Wow! You have 2 stars already!') 

     if self.firstVar.get() == 1 and self.secondVar.get() == 1 and self.thirdVar.get() == 1: 
      self.stars.set('You have 3 gold stars, what a good boy.') 






    def createWidgets(self): 
     self.starCount = 0 
     self.stars = tk.StringVar(self, 'No stars yet') 
     self.textBox = tk.Label(self, textvariable= self.stars) 

     self.firstVar = tk.BooleanVar(self) 
     self.checkBox1 = tk.Checkbutton(self, text='Have you finished sweeping and mopping?', variable=self.firstVar, onvalue = 1, offvalue = 0) 

     self.secondVar = tk.BooleanVar(self) 
     self.checkBox2 = tk.Checkbutton(self, text='Have you finished preparing food?', variable=self.secondVar, onvalue = 1, offvalue = 0) 

     self.thirdVar = tk.BooleanVar(self) 
     self.checkBox3 = tk.Checkbutton(self, text='Have you finished mowing the lawn?', variable=self.thirdVar, onvalue = 1, offvalue = 0) 

     self.calcBtn = tk.Button(text= 'stars?', command = self.genMessage) 

     self.textBox.grid(column=1, row=0) 
     self.checkBox1.grid(column=1, row=1) 
     self.checkBox2.grid(column=1, row=2) 
     self.checkBox3.grid(column=1, row=3) 
     self.calcBtn.grid(column=1, row=4) 

    def __init__(self, parent): 
     tk.Frame.__init__(self, parent) 
     self.grid() 
     self.createWidgets() 





app = application(root) 
root.mainloop() 
関連する問題