2017-09-26 11 views
1

私はpythonでクリッカーゲームを作ろうとしていますが、エラーが続きます"TypeError: unorderable types: IntVar() > int()"私は他の投稿を見て、まだ.getのことを理解していません。ここまでは私のコードです:TypeError:並べ替えることのできない型:IntVar()> int()

import tkinter 
from tkinter import * 
import sys 

root = tkinter.Tk() 
root.geometry("160x100") 
root.title("Cliker game") 
global counter 
counter = tkinter.IntVar() 
global multi 
multi = 1 

def onClick(event=None): 
    counter.set(counter.get() + 1*multi) 

tkinter.Label(root, textvariable=counter).pack() 
tkinter.Button(root, text="I am Cookie! Click meeeeee", command=onClick, 
fg="dark green", bg = "white").pack() 


clickable = 0 
def button1(): 
     global multi 
     global counter 
     if counter > 79: # this is the line where the error happens 
      counter = counter - 80 
      multi = multi + 1 
      print ("you now have a multiplier of", multi) 
     else: 
      print ("not enough moneys!") 
b = Button(text="+1* per click, 80 cookies", command=button1) 
b.pack() 


root.mainloop() 
+0

例外の完全なトレースバックが少なくとも*必要です。 –

+0

'IntVar'を' int'に変換するとどうなりますか? 'int(counter)> 79:' – Joe

+1

'counter'は' IntVar'であり、それを整数と比較しています。おそらく、代わりに 'IntVar'に格納された値を取得するために' counter.get()> 79'を使用したかったでしょうか? –

答えて

2

同じ種類(または互換性のある種類)を比較する必要があります。その場合、IntVarオブジェクトを直接intと比較することはできないようです。しかし、getメソッドは、の整数を返します。

私はtk専門家ではないんだけど、これは問題を再現し、修正を提供:あなたのケースで

>>> root = tkinter.Tk() 
>>> counter = tkinter.IntVar() 
>>> counter.get() 
0 
>>> counter < 10 
Traceback (most recent call last): 
    File "<string>", line 301, in runcode 
    File "<interactive input>", line 1, in <module> 
TypeError: unorderable types: IntVar() < int() 
>>> counter.get() < 10 
True 
>>> 

を、変更:

if counter > 79: 

if counter.get() > 79: 

によって通りコメントが示唆された場合は、他の場所で問題が発生しています。したがって、.get.setの場合は、整数が& IntVarのオブジェクトが混在する場合があります。

+0

あなたの専門用語は混乱しています。 'IntVar'で' get'を呼び出すことは整数に_キャストするのではありません。 「キャスティング」は通例「変換」を意味し、「IntVar」を変換していない場合は、その値をフェッチしています。 –

+0

あなたは正しいです。最近C++が多すぎます:= –

+0

ありがとうございました。D –

関連する問題