2016-10-10 31 views
0

このtkinterコード(tkintt.py)にユーザがクラスタを入力してSubmitボタンをクリックすると、プログラムがk-medoidsコード(example.py)を実行するのに必要なクラスタの数ユーザーの入力が間違っています。 私を助けることができますか?tkinterのユーザ入力でpythonコードを実行する方法

tkintt.py

import Tkinter 
from _tkinter import * 
root = Tkinter.Tk() 

label1 = Tkinter.Label(text = " enter cluster : ") 
label1.pack() 
clvar = Tkinter.IntVar() 
cluster = Tkinter.Entry(bd = 5) 
clvar = cluster.get() 
cluster.pack() 

def open1(): 
    print ("K-MEDOIDS CLUSTERING") 
    execfile('example.py') 

button_1 = Tkinter.Button(text = "SUBMIT", command = open1) 
button_1.pack() 
root.mainloop() 

example.py

from k_medoids import KMedoids 
import numpy as np 
import matplotlib.pyplot as plt 


def example_distance_func(data1, data2): 
    '''example distance function''' 
    return np.sqrt(np.sum((data1 - data2)**2)) 

if __name__ == '__main__': 
    X = np.random.normal(0,3,(500,2)) 
    model = KMedoids(n_clusters= cluster, dist_func=example_distance_func) 
    model.fit(X, plotit=True, verbose=True) 
    plt.show() 

エラー:

Traceback (most recent call last): 
    File "C:\Users\user\Anaconda2\lib\lib-tk\Tkinter.py", line 1537, in __call__ 
     return self.func(*args) 
    File "C:/Users/user/Anaconda2/K_Medoids-master/tkintt.py", line 15, in open1 
     execfile('example.py') 
    File "example.py", line 13, in <module> 
     model.fit(X, plotit=True, verbose=True) 
    File "C:\Users\user\Anaconda2\K_Medoids-master\k_medoids.py", line 114, in  fit 
    X,self.n_clusters, self.dist_func, max_iter=self.max_iter, tol=self.tol,verbose=verbose) 
    File "C:\Users\user\Anaconda2\K_Medoids-master\k_medoids.py", line 54, in _kmedoids_run members, costs, tot_cost, dist_mat = _get_cost(X, init_ids,dist_func) 
    File "C:\Users\user\Anaconda2\K_Medoids-master\k_medoids.py", line 37, in _get_cost mask = np.argmin(dist_mat,axis=1) 
    File "C:\Users\user\Anaconda2\lib\site-packages\numpy\core\fromnumeric.py", line 1034, in argmin return argmin(axis, out) 
    ValueError: attempt to get argmin of an empty sequence 
+1

KMedoidsを回るラッパー関数を作成し、ボタンをクリックしたときに実行するだけです。 –

+0

@leafどうすればいいですか?私は困惑している。私は自分のコードに追加すべきものを書くことができますか? – kikiegoguma

+0

あなたは持っているエラーを投稿できますか? – TheInitializer

答えて

0

そのK-メドイドが正しくalletheコーナーケースを処理していないかのように表示されます。

ほとんどの場合、空のクラスタがあります。

+0

を投稿したので、tkinter GUIのユーザ入力からクラスタ値を取得する方法は?私はどこで編集すべきですか? – kikiegoguma

+0

クラスタリングがクラッシュした場合、クラスタ値はありません。 –

関連する問題