質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

解決済

<B1-Motion>を使用して複数の動作をする

shibububu1117
shibububu1117

総合スコア3

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

3回答

0評価

0クリップ

276閲覧

投稿2021/12/20 04:47

<B1-Motion>を使用して線を書く動作と背景の色が範囲によって変わる動作をしたいです。
しかし<B1-Motion>を二つ使用するとどちらかしか実行できません。
そもそも<B1-Motion>で二つの関数を動かすことは不可能なのでしょうか?

Python

import tkinter from PIL import Image, ImageDraw from tkinter import filedialog import math import time class Application(tkinter.Frame): def __init__(self, master=None): super().__init__(master) self.master = master self.master.title('tkinter canvas trial') self.pack() self.create_widgets_Line() self.setup() self.changebg_flag = False def create_widgets_Line(self): self.vr = tkinter.IntVar() self.vr.set(1) self.test_canvas = tkinter.Canvas(self, bg="#fff", width=1400, height=700) self.test_canvas.grid(row=1, column=0, columnspan=4) self.test_canvas.bind('<B1-Motion>',self.paint)#押されたときに取得した位置と現在のマウスカーソル位置で移動距離を計算し、再配置 self.test_canvas.bind('<ButtonRelease-1>', self.reset)#次に画面をタップする座標を調整する(保持していた座標をクリアする) button3 = tkinter.Button(root, text = "線を消す",command=self.clear_canvas) #ボタンWidgetを生成 button3.place(x=5, y=65) #ボタンを配置 #------------背景チェンジ------------------------------ self.button_changebg=tkinter.Button(root,text="背景変化") self.button_changebg.place(x=160,y=5) self.button_changebg.config(state="disabled") self.button_changebg.bind("<Button-1>", self.toggle_changebg) self.test_canvas.bind('<B1-Motion>',self.changebg)#ここを消すと線は書けるが、背景が変わらない。。。しかしここを付け加えると背景は変わるが線は引けない。。。 def toggle_changebg(self, _): self.changebg_flag = not self.changebg_flag self.button_changebg.config(state=["disabled", "normal"][self.changebg_flag]) def changebg(self, event): if not self.changebg_flag: return if event.y<100: self.test_canvas['bg']='gray40' elif 100<event.y<250: self.test_canvas['bg']='gray0' elif 250<event.y<400: self.test_canvas['bg']='gray40' elif 400<event.y<550: self.test_canvas['bg']='gray0' elif 550<event.y<700: self.test_canvas['bg']='gray40' def setup(self): self.line_x = None self.line_y = None self.color1 = "#000"#黒 self.eraser_on = False self.im = Image.new('RGB', (600, 600), "#fff") self.draw = ImageDraw.Draw(self.im) def change_radio(self): if self.vr.get() == 1: self.eraser_on = False else: self.eraser_on = True def clear_canvas(self):#画面に書いたものを消す self.test_canvas.delete(tkinter.ALL) def paint(self, event):#マウスで線を書く if self.eraser_on: paint_color1 = "#000" else: paint_color1 = "#000" if self.line_x and self.line_y: self.test_canvas.create_line(self.line_x, self.line_y, event.x, event.y, width=5.0, fill=paint_color1, capstyle=tkinter.ROUND, smooth=tkinter.TRUE, splinesteps=36) self.draw.line((self.line_x, self.line_y, event.x, event.y), fill=paint_color1, width=5) self.line_x = event.x self.line_y = event.y def reset(self, event): self.line_x, self.line_y = None, None root = tkinter.Tk() app = Application(master=root) app.mainloop()

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。