Как сделать несколько кнопок в модуле черепахи Python без хардкора - PullRequest
0 голосов
/ 10 июля 2019

Я хочу сделать «приложение» для черепашьего питона с кнопками. Я знаю, как сделать кнопку, но я хочу сделать там кнопки 1+ и БЕЗ ЛЮБОГО ХАРДКОРА, пожалуйста.

Я видел инструкции на YouTube и читал комментарии, один человек задал такой вопрос, а YTBer ответил «да». тебе понадобится хардкор, что-то в этом роде. Я не хочу хардкор.

... вы правы, это не работает при использовании 2 кнопок, я понял, что после создания видео, но, к счастью, я нашел решение для этого ....... так что причина не работает потому что для двух кнопок требуется метод turtle.onscreenclick для прослушивания двух методов объекта, и он по какой-то причине не может этого сделать, поэтому мы можем просто жестко закодировать его в классе следующим образом:

import turtle
import time

wn = turtle.Screen()
wn.bgcolor("Green")
wn.setup(700, 700)
wn.tracer(0)

class Button(turtle.Turtle):
    def __init__(self,s, text, x, y, w, h, c, i, p, a=None, b2=None):
        turtle.Turtle.__init__(self)
        self.msg = text
        self.x = x
        self.y = y
        self.pens...

Я пытался выполнить () код cdlane, но получил

I got a


Traceback (most recent call last):
  File "<pyshell#2>", line 60, in <module>
    ''')
  File "<string>", line 51, in <module>
  File "<string>", line 10, in __init__
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/turtle.py", line 3816, in __init__
    visible=visible)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/turtle.py", line 2557, in __init__
    self._update()
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/turtle.py", line 2660, in _update
    self._update_data()
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/turtle.py", line 2646, in _update_data
    self.screen._incrementudc()
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/turtle.py", line 1292, in _incrementudc
    raise Terminator
turtle.Terminator

Использовал команду exec ('')

1 Ответ

0 голосов
/ 13 июля 2019

turtle построен поверх tkinter и tkinter.Canvas, поэтому вы можете использовать tkinter.Button и другие виджеты и добавлять на холст.

import turtle
import tkinter as tk

def test1():
    print("clicked World")

def test2():
    print("clicked World")

canvas = turtle.getcanvas()
parent = canvas.master

button1 = tk.Button(parent, text='Hello', command=test1)
id1 = canvas.create_window((0,0), window=button1)

button2 = tk.Button(parent, text='World', command=test2)
id2 = canvas.create_window((100,0), window=button2)

turtle.done()

Button нужен родитель - здесь может быть только canvas.master. Если вы забыли parent, то он создаст окно tkinter, и вы увидите два окна.

command= ожидать имя функции без () и параметров. Эта функция запускается при нажатии кнопки.

Button имеет другие параметры, такие как background, font и т. Д.

create_window используется для добавления любого виджета tkinter. Первый параметр - это его положение на холсте. У него есть другие варианты.

crete_window дает идентификатор, который можно использовать для удаления виджета canvas.delete(ID) или его перемещения canvas.move(ID, offset_x, offset_y)


Tkinter: Canvas , Кнопка , больше виджетов


EDIT: создает 10 кнопок, и каждая кнопка использует lambda для назначения функции с параметрами. Каждая кнопка меняет текст на Label

import turtle
import tkinter as tk

def test(value):
    print("clicked", value)
    label['text'] = str(value)

canvas = turtle.getcanvas()
parent = canvas.master

label = tk.Label(parent, text="???")
canvas.create_window((0, -30), window=label)

for x in range(10):
    text = 'Button {}'.format(x)
    button = tk.Button(parent, text=text, command=(lambda val=x:test(val)))
    canvas.create_window((0, x*30), window=button)

turtle.done()
...