前提・実現したいこと
matplolibで作成した、色と形をランダムに表示するというプログラムを、tkinter上で、ボタンを押す操作をすることより繰り返し表示させたいと考えています。
ですが、matplotlibとtkinterの紐づけ方がわからずに困っております。
全体的なプログラムの構造としては、def draw()内に、ボタンを押すごとに実行したいプログラムを貼り付け、そしてbutton.bind("<Button-1>",draw)で繰り返そうとしています。
def draw内のプログラムの内容は、実行するごとに色がRGB表色系でランダムに選ばれ、形は新月~新月までの月の形をランダムに表すものとしました。
有識者の方、どうかご教示お願いいたします。
発生している問題・エラーメッセージ
TypeError: draw() takes 0 positional arguments but 1 was given
該当のソースコード
Python
1import sys 2import tkinter 3import numpy as np 4import random 5import matplotlib.pyplot as plt 6from mpl_toolkits.mplot3d import Axes3D 7from matplotlib.backends.backend_tkagg import (FigureCanvasTkAgg, NavigationToolbar2Tk) 8from matplotlib.figure import Figure 9 10 11def draw(): 12 fig = plt.figure(figsize=(10,10)) 13 ax=fig.gca(projection='3d') 14 ax.set_xlim([-1., 1.]) 15 ax.set_ylim([-1., 1.]) 16 ax.set_zlim([-1., 1.]) 17 for a in [ax.xaxis, ax.yaxis, ax.zaxis]: 18 a.set_ticklabels([]) 19 a._axinfo['grid']['linewidth'] = 0 20 a._axinfo['tick']['linewidth'] = 0 21 22 for a in [ax.w_xaxis, ax.w_yaxis, ax.w_zaxis]: 23 a.line.set_linewidth(0) 24 a.set_pane_color((0., 0., 0., 0.)) 25 #順にRGBA 26 27 ax.set_facecolor('black') 28 29 30 u, v = np.mgrid[0:2*np.pi:50j, 0:np.pi:25j] 31 32 x = np.cos(u) * np.sin(v) 33 y = np.sin(u) * np.sin(v) 34 z = np.cos(v) 35 36 a=random.random() 37 b=random.random() 38 c=random.random() 39 40 colors = np.zeros((50, 25, 3)) 41 for i in range(0, 25): 42 for j in range(0, 25): 43 colors[i][j][0] = a 44 colors[i][j][1] = b 45 colors[i][j][2] = c 46 47 ax.plot_surface(x, y, z, facecolors = colors, shade = False) 48 49 moon=random.randint(-90,270) 50 51 ax.view_init(elev = 0, azim = moon) 52 53 canvas = tkinter.Canvas(root, width = 800, height = 300) 54 canvas.draw() 55 canvas.get_tk_widget().pack(side=tkinter.TOP, fill=tkinter.BOTH, expand=1) 56 57root = tkinter.Tk() 58root.wm_title("色と形をランダムに表示する") 59 60button= tkinter.Button(root, text=u'かく',width=15) 61button.bind("<Button-1>",draw) 62button.place(x=200,y=350) 63 64tkinter.mainloop()
試したこと
エラーメッセージで引数がないと言われたので、selfを入れてみましたが解決に至りませんでした
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/19 07:43 編集
2020/08/19 08:13
2020/08/19 11:16 編集