1

(24 відповідей, залишених у Python)

З допомогою було створено наступний код:

from tkinter import *
from PIL import Image, ImageTk
from pygame import mixer
import time
from collections import deque
 
root = Tk()
 
a = int(10)
 
global Mylist 
Mylist = []

def plus():  
    
    global a
    a = int(a)
    a += 30
 
    for y in range(50,150,20): 
        c.create_line(0, y, 500+a, y, width=2,fill="black")

def add_photo(vert,img):
    c.create_image(0+a,vert,image=img,tags = 'image')
 
def play_note(mp3):  
    mixer.init()
    mixer.music.load(mp3)
    mixer.music.play()
    root.after(2000)
    mixer.music.stop()
    
def create_add_note(vert,img,mp3):  
    def add(event): 
        add_photo(vert,img) 
        plus()
        play_note(mp3)  
        Mylist.append(mp3) 
        
    return add
 
def bu(event): 
    root.destroy()

def play(event):
    
    for play_note1 in (Mylist):     
        play_note(play_note1)

selected = None
real_number  = None # Перший всадник апокаліпсису

def canvas_on_click(event):
    global selected,real_number
    
    overlap_items = c.find_overlapping(event.x, event.y, event.x, event.y)
    
    
    overlap_items = list(_id for _id in overlap_items if 'image' in c.gettags(_id))
    number = overlap_items[0] # Продовження жаху
    real_number = (number // 6) - 1 # Id просто кратне 6 і тоді я можу дізнатися порядковий номер ноти
    
    if overlap_items:
        item = overlap_items[0]
        selected = item       
        bbox = c.bbox(item)  
        c.delete('selection')  
        c.create_rectangle(bbox, outline='red', width=2, tags='selection') 
    else:
        selected = None
        c.delete('selection')  

#c.bind('<1>', canvas_on_click)


def remove_selected():
    
    if selected is not None:
        global Myllist
        
        Mylist.pop(real_number) #типу видалення того елементу
        c.delete(selected)  
        c.delete('selection')  

b = Button(root, text='Remove', command=remove_selected)
#b.pack()


c = Canvas(width=500,height=300,bg="white",cursor="pencil")
c.pack()
for y in range(50,150,20):
    c.create_line(0, y, 500, y, width=2,fill="black")

pilImage = Image.open("notaall.png")
DO= ImageTk.PhotoImage(pilImage)
 
pillImageRe = Image.open('notaall.png')
RE = ImageTk.PhotoImage(pillImageRe)
 
scr = Scrollbar(root) 
scr.config(command = c.xview,orient = HORIZONTAL )
scr.pack() 
 
but = Button(root,text='Press to destroy window') 
but.place(x=0,y=0)
but.bind('<Button-1>',bu)

but2 = Button(root,text = 'Press to replay')
but2.place(x =200,y = 0) 
but2.bind('<Button-1>',play)

b.pack()

c.bind('<1>', canvas_on_click)

root.bind('a',create_add_note(140,DO,'1.mp3')) 
root.bind('s',create_add_note(130,RE,'2.mp3'))
          
root.mainloop()

Дайте,будь ласка, магічний пинок в сторону як видалити звук.
Я розумію типу так. Ось я клікнув по ноті. Дізнався,що вона в списку,наприклад 5 й видалив.
Воно то працює(видаляє і ноту і звук ),але так нормальні люди не пишуть

2

(16 відповідей, залишених у Python)

ping написав:
N1ck написав:
Master_Sergius написав:

Добре, і все ж, а який тоді сенс робити ехе із пайтон коду? Швидше виконуватися не буде, можливо, навіть повільніше, бо туди буде впихувати все, що потрібно для виконання.

Думаю буде не зайвим пояснити чому це вирішив зробити я.
По-перше,це цікаво. Дізнатися щось нове й подолати проблему,нехай й не відразу.
По-друге,код який я писав буде використовуватися на комп’ютері де немає ані python,ані бібліотек,які потрібні для коректної роботи програми. Тому створити ексешник й встановити на комп в 100 разів легше.
З приводу того,що хтось може дізнтися код,то мені не шкода,там особливого нічого немає

ще додам - такі завдання часто зустрічаються на upwork and freelancer.com - можна заробти пару доларів.

Вау,приємно вражений,дякую

3

(24 відповідей, залишених у Python)

koala написав:

Ну дивіться. У вас є модель (внутрішнє представлення) вашої симфонії одним пальцем по білих клавішах однієї октави - list, і два зовнішніх представлення - ноти на формі та відтворення музики. З другим легше - якщо видалити ноту, то play буде брати всі дані з моделі. Але друге представлення ви формуєте послідовно, функцією add, яка ніде, крім внутрішнього стану форми, не зберігає, що саме вона додала. Отже, вам слід або додати в add збереження зображень нот у відповідний список, або перебирати всі віджети форми функцією winfo_children(), шукати зображення нот і знищувати їх, а потім циклом по нотах симфонії створювати їх заново.

Відразу питання,що таке модель(внутрішнє представлення) це простіше кажучи код?

4

(16 відповідей, залишених у Python)

Master_Sergius написав:

Добре, і все ж, а який тоді сенс робити ехе із пайтон коду? Швидше виконуватися не буде, можливо, навіть повільніше, бо туди буде впихувати все, що потрібно для виконання.

Думаю буде не зайвим пояснити чому це вирішив зробити я.
По-перше,це цікаво. Дізнатися щось нове й подолати проблему,нехай й не відразу.
По-друге,код який я писав буде використовуватися на комп’ютері де немає ані python,ані бібліотек,які потрібні для коректної роботи програми. Тому створити ексешник й встановити на комп в 100 разів легше.
З приводу того,що хтось може дізнтися код,то мені не шкода,там особливого нічого немає

5

(24 відповідей, залишених у Python)

Є ще таке питання. Як його чітко сформулювати я не знаю. Розпишу як я бачу. Ось я написав симфонію, викорисстовуючу дану програму,все коректно збереглося.
Однак,наприклад,я захотів видалити якусь ноту(і з робочого екрану й з пам’яті). Як це зробити?
Якщо можна просто поясніть,що мені для цього потрібно вивчити,загуглити(я навіть не знаю,що слід гуглити)

6

(24 відповідей, залишених у Python)

koala написав:

У мене сьогодні гарний настрій :)

from tkinter import *
from PIL import Image, ImageTk
from pygame import mixer
import time

class Note:

    def __init__(self,name,key,height,mp3,image):
        self.name   = name
        self.key    = key
        self.height = height
        self.mp3    = mp3
        self.image  = ImageTk.PhotoImage( Image.open(image) )
        
    def play(self):
        mixer.init()
        mixer.music.load(self.mp3)
        mixer.music.play()
        time.sleep(0.5)
        mixer.music.stop()

    def event_add_note(self,form):
        def add(event):
            form.canvas.create_image(form.current_position,self.height,image=self.image) #
            form.plus()
            self.play()
            form.list.append(mp3)
        return add

class Form:

    def __init__(self):
        self.root             = Tk()
        self.current_position = 10 # колишнє a
        self.list = [] #YAGN deque
        self.canvas = Canvas(width=500,height=300,bg="white",cursor="pencil")
        self.canvas.pack()
        for y in range(50,150,20):
            self.canvas.create_line(0, y, 500, y, width=2,fill="black")

        self.scr = Scrollbar(self.root)
        self.scr.config(command = self.canvas.xview,orient = HORIZONTAL )
        self.scr.pack()

        self.button_close = Button(self.root,text='Press to destroy window')
        self.button_close.place(x = 0,y = 0)
        self.button_close.bind('<Button-1>',self.destroy)
        
        self.button_play = Button(self.root,text = 'Press to replay')
        self.button_play.place(x = 200,y = 0) 
        self.button_play.bind('<Button-1>',self.play)

        notes = [Note("Do","a",140,"1.mp3","notaall.png"),
                 Note("Re","s",130,"2.mp3","notaall.png")
                #тут продовжити; на майбутнє - можна окремо підвантажувати з файла
                ]

        for note in notes:
            self.root.bind(note.key,note.event_add_note(self))

        self.root.mainloop()

    def plus(self):
        self.current_position += 30
        for y in range(50,150,20):
            self.canvas.create_line(0, y, 500+self.current_position, y, width=2,fill="black")

    def destroy(self,event):
        self.root.destroy()

    def play(self,event):
        for note in self.list:
            note.play()

if __name__ == "__main__":
    main_form = Form()

Вау! Дійсно велике дякую,зараз розпочну вчити класи(а то мої знання в цій темі доволі вузькі) і думаю,що тоді Ваш код буде зрозуміліший

7

(24 відповідей, залишених у Python)

Можливо десь колись кому знадобиться щось подібне

from tkinter import *
from PIL import Image, ImageTk
from pygame import mixer
import time
from collections import deque
 
root = Tk()
 
a = int(10)
 
global Mylist 
Mylist = deque()
 
def plus():
    
    global a
    a = int(a)
    a += 30
 
    for y in range(50,150,20):
        c.create_line(0, y, 500+a, y, width=2,fill="black")
 
def play_note(mp3):
    mixer.init()
    mixer.music.load(mp3)
    mixer.music.play()
    time.sleep(0.5)
    mixer.music.stop()
    
    
def create_add_note(vert,img,mp3):
    def add(event):
        c.create_image(0+a,vert,image=img) #
        plus()
        play_note(mp3)
        Mylist.append(mp3)
    return add
 
def bu(event):
    root.destroy()

def play(event):
    for play_note1 in list( Mylist):     
        
        play_note(play_note1)
  
c = Canvas(width=500,height=300,bg="white",cursor="pencil")
c.pack()
for y in range(50,150,20):
    c.create_line(0, y, 500, y, width=2,fill="black")

pilImage = Image.open("notaall.png")
DO= ImageTk.PhotoImage(pilImage)
 
pillImageRe = Image.open('notaall.png')
RE = ImageTk.PhotoImage(pillImageRe)
 
scr = Scrollbar(root)
scr.config(command = c.xview,orient = HORIZONTAL )
scr.pack() 
 
but = Button(root,text='Press to destroy window')
but.place(x=0,y=0)
but.bind('<Button-1>',bu)

but2 = Button(root,text = 'Press to replay')
but2.place(x =200,y = 0) 
but2.bind('<Button-1>',play)

root.bind('a',create_add_note(140,DO,'1.mp3'))
root.bind('s',create_add_note(130,RE,'2.mp3'))
          
root.mainloop()

8

(24 відповідей, залишених у Python)

koala написав:
N1ck написав:

Де ви бачите print(play_note)??

Єдине місце, де воно зустрічається на цій сторінці - ваш допис від 16:44:33. Я жодного разу цього виразу не писав, тому не знаю, чому ви у мене це питаєте.

Прихований текст

Ви в курсі, що Python ніколи не сплутає ідентифікатори, що відрізняються хоча б однією літерою чи цифрою?

Та ні,цілковито моя помилка. Я сильно затупив в цьому моменті. Дякую,Вам велике.

9

(24 відповідей, залишених у Python)

Все стоп. Моя помилка. Опустившись до рівня дитячого садочку я зрозумів як має бути.

def play(event):
    for play_note1 in list( Mylist):     
        
        play_note(play_note1)

В цих рядкав доки значення play_note1 в межах Mylist відбувається виклик функції play_note зі значення play_note1.
Дякую,що розжували,сильно туплю

10

(24 відповідей, залишених у Python)

koala написав:

Добре, опускаємося до рівня дитячого садочка.
Що буде, якщо у виразі

print(play_note1)

зробити замість слова "print" слово "play_note"?

Прихований текст

І ви взагалі знаєте, що таке функція, список, рядок і т.д., чи навмання ліпите шматочки чужого коду докупи в надії, що воно запрацює?

Де ви бачите print(play_note)??

11

(24 відповідей, залишених у Python)

koala написав:

Які саме слова в реченні "так ви не print робіть, а play_note" вам незрозумілі? З якого саме слова (чи з якої комбінації слів) ви зробили висновок, що там має бути event?

І ніколи не питайте, так програма працює чи ні. Ви можете перевірити, так чи ні, значно швидше і надійніше, ніж ми, просто її запустивши. Якщо вам щось не зрозуміло - то питайте про це прямо: що бачите, що очікуєте, і якісь свої міркування чи опис спроб це вирішити. Не змушуйте нас здогадуватися.

Ок,погоджуюся,я був неправий причому не тільки в цьому.
Є код

from tkinter import *
from PIL import Image, ImageTk
from pygame import mixer
import time
from collections import deque
 
root = Tk()
 
a = int(10)
 
global Mylist 
Mylist = deque()
 
def plus():
    
    global a
    a = int(a)
    a += 30
 
    for y in range(50,150,20):
        c.create_line(0, y, 500+a, y, width=2,fill="black")
 
def play_note(mp3):
    mixer.init()
    mixer.music.load(mp3)
    mixer.music.play()
    time.sleep(0.5)
    mixer.music.stop()
    
    
def create_add_note(vert,img,mp3):
    def add(event):
        c.create_image(0+a,vert,image=img) #
        plus()
        play_note(mp3)
        Mylist.append(mp3)
    return add
 
def bu(event):
    root.destroy()

def play(event):
    for play_note in list( Mylist):     
        
        play_note
  
c = Canvas(width=500,height=300,bg="white",cursor="pencil")
c.pack()
for y in range(50,150,20):
    c.create_line(0, y, 500, y, width=2,fill="black")

pilImage = Image.open("notaall.png")
DO= ImageTk.PhotoImage(pilImage)
 
pillImageRe = Image.open('notaall.png')
RE = ImageTk.PhotoImage(pillImageRe)
 
scr = Scrollbar(root)
scr.config(command = c.xview,orient = HORIZONTAL )
scr.pack() 
 
but = Button(root,text='Press to destroy window')
but.place(x=0,y=0)
but.bind('<Button-1>',bu)

but2 = Button(root,text = 'Press to replay')
but2.place(x =200,y = 0) 
but2.bind('<Button-1>',play)

root.bind('a',create_add_note(140,DO,'1.mp3'))
root.bind('s',create_add_note(130,RE,'2.mp3'))
          
root.mainloop()

Від рядків

def play(event):
    for play_note in Mylist:
        play_note   

Я очікую,що відбудеться повтор. Він не відбувається,помилки також немає.
Якщо написати

def play(event):
    for play_note in Mylist:
        play_note()
 


відбудеться помилка
play_note()
TypeError: 'str' object is not callable

12

(24 відповідей, залишених у Python)

koala написав:
koala написав:

можна зробити одну функцію play_note з параметром, і саме цей параметр додавати в Mylist.

def play_note(mp3):
    mixer.init()
    mixer.music.load(mp3)
    mixer.music.play()
    time.sleep(0.5)
    mixer.music.stop()
N1ck написав:
print(play_note1)
koala написав:

Так ви не print робіть, а play_note.

N1ck написав:
play_note1(event)

Ви оце серйозно?

Повинно бути так

def play_note(mp3):
    mixer.init()
    mixer.music.load(mp3)
    mixer.music.play()
    time.sleep(0.5)
    mixer.music.stop()
    Mylist.append(mp3)

плюс виклик для програвання

def play(event):
    for play_note in Mylist:
        play_note(event)     
        #print(play_note)

Так?

13

(24 відповідей, залишених у Python)

koala написав:

Так ви не print робіть, а play_note.
І згорніть всі ці create_line з рядків 54-58 у цикл:

for y in range(50,150,20):
    c.create_line(0, y, 500, y, width=2,fill="black")

От зі plus - складніше. Я так розумію, ви хочете розтягнути лінії; натомість, ви сторюєте нові, які на них накладаються. Гм... Рядки 54-58:
staff = [c.create_line(0, y, 500, y, width=2,fill="black") for y in range(50,150,20)]
plus:

def plus():
    global a
    a = int(a)
    a += 30
    for y in range(50,150,20):
        c.coords(staff, 0, y, 500+a*2, y)

Тепер лишилося тільки прибрати глобальні змінні - і код, хоча й імперативний, вже можна буде комусь показувати.

from tkinter import *
from PIL import Image, ImageTk
from pygame import mixer
import time
from collections import deque
 
root = Tk()
 
a = int(10)
 
global Mylist 
Mylist = deque()
 
def plus():
    
    global a
    a = int(a)
    a += 30
 
    for y in range(50,150,20):
        c.create_line(0, y, 500+a, y, width=2,fill="black")
 
def play_note(mp3):
    mixer.init()
    mixer.music.load(mp3)
    mixer.music.play()
    time.sleep(0.5)
    mixer.music.stop()
    
def create_add_note(vert,img,mp3):
    def add(event):
        c.create_image(0+a,vert,image=img) #
        plus()
        play_note(mp3)
        Mylist.append(mp3)
    return add
 
def bu(event):
    root.destroy()

def play(event):
    for play_note1 in Mylist:     
        #print(play_note1)
        play_note1(event)
  
c = Canvas(width=500,height=300,bg="white",cursor="pencil")
c.pack()
for y in range(50,150,20):
    c.create_line(0, y, 500, y, width=2,fill="black")

pilImage = Image.open("notaall.png")
DO= ImageTk.PhotoImage(pilImage)
 
pillImageRe = Image.open('notaall.png')
RE = ImageTk.PhotoImage(pillImageRe)
 
scr = Scrollbar(root)
scr.config(command = c.xview,orient = HORIZONTAL )
scr.pack() 
 
but = Button(root,text='Press to destroy window')
but.place(x=0,y=0)
but.bind('<Button-1>',bu)

but2 = Button(root,text = 'Press to replay')
but2.place(x =200,y = 0) 
but2.bind('<Button-1>',play)

root.bind('a',create_add_note(140,DO,'1.mp3'))
root.bind('s',create_add_note(130,RE,'2.mp3'))
          
root.mainloop()

Маємо щось таке.
З приводу play_note1(event). Я робив прінт,щоб подивитися,що воно виведе. Воно,як видно з картинки вивело 1.mp3 є видало помилку,що не може викликати строку.

14

(24 відповідей, залишених у Python)

from tkinter import *
from PIL import Image, ImageTk
from pygame import mixer
import time
from collections import deque

root = Tk()

a = int(10)

global Mylist 
Mylist = deque()

def plus():
    
    global a
    a = int(a)
    a += 30

    c.create_line(0,50,500+a*2,50,width=2,fill="black")
    c.create_line(0,70,500+a*2,70,width=2,fill="black")
    c.create_line(0,90,500+a*2,90,width=2,fill="black")
    c.create_line(0,110,500+a*2,110,width=2,fill="black")
    c.create_line(0,130,500+a*2,130,width=2,fill="black")


def play_note(mp3):
    mixer.init()
    mixer.music.load(mp3)
    mixer.music.play()
    time.sleep(0.5)
    mixer.music.stop()
     
def create_add_note(vert,img,mp3):
    def add(event):
        c.create_image(0+a,vert,image=img) #
        plus()
        play_note(mp3)
        Mylist.append(mp3)
    return add

def bu(event):
    root.destroy()



def play(event):
    for play_note1 in Mylist:
        #play_note1(event)     
        print(play_note1)
  
c = Canvas(width=500,height=300,bg="white",cursor="pencil")

c.create_line(0,50,500,50,width=2,fill="black")
c.create_line(0,70,500,70,width=2,fill="black")
c.create_line(0,90,500,90,width=2,fill="black")
c.create_line(0,110,500,110,width=2,fill="black")
c.create_line(0,130,500,130,width=2,fill="black")

pilImage = Image.open("notaall.png")
DO= ImageTk.PhotoImage(pilImage)

pillImageRe = Image.open('notaall.png')
RE = ImageTk.PhotoImage(pillImageRe)

scr = Scrollbar(root)
scr.config(command = c.xview,orient = HORIZONTAL )


but = Button(root,text='Press to destroy window')
but.place(x=0,y=0)
but2 = Button(root,text = 'Press to replay')
but2.place(x =200,y = 0) 
but2.bind('<Button-1>',play)
but.bind('<Button-1>',bu)

root.bind('a',create_add_note(140,DO,'1.mp3'))
root.bind('s',create_add_note(130,RE,'2.mp3'))
          
c.pack()
scr.pack()

root.mainloop()

Я скоріш за все щось не зрозумів,навіть попри те,що доволі довго намагався вникнути. Ви мала на увазі такий код? Якщо так,то при

print(play_note1)

виплива 1.mp3 або 2.mp3. Прошу пояснити(якщо можете то прямо написати) в чомуу моя помилка. Дійсно хочу зрозуміти,але....

15

(24 відповідей, залишених у Python)

koala написав:

У вас є дві окремі дії - відтворення і додавання до списку. Їх, вочевидь, треба зробити окремими функціями (при цьому можна викликати відтворення з додавання). Десь так:

def play_do():
    mixer.init()
    mixer.music.load('1.mp3')
    mixer.music.play()
    time.sleep(0.5)
    mixer.music.stop()

def add_do(event):
    c.create_image(0+a,140,image=DO)
    plus()
    play_do()
    Mylist.append(play_do)

Але ясно, що всі ці "play_щось" відрізняються однією деталлю - файлом. Тобто можна зробити одну функцію play_note з параметром, і саме цей параметр додавати в Mylist.
Що ж до узагальнення add_note, то нам потрібно багато схожих функцій. Потрібно? То створимо їх у функції:

def create_add_note(vert,img,mp3):
    def add(event):
        c.create_image(0+a,vert,image=img) #
        plus()
        play_note(mp3)
        Mylist.append(mp3)
    return add

І тепер можна зробити просто

root.bind('k',create_add_note(140,DO,'1.mp3')
root.bind('s',create_add_note(130,RE,'2.mp3')
і т.д.

А ще краще - проголосити клас для ноти, що міститиме всі ці параметри (висота на малюнку, малюнок, файл, пов'язана клавіша, що там ще треба), створити набір нот і потім все виставляти в циклах.

Вау! Дуже дякую,набагато коротше й зрозуміліше аніж мій "код". ДЯКУЮ!

16

(24 відповідей, залишених у Python)

koala написав:

Там червоним по білому написано: ви змінюєте deque під час ітерації по ньому. Дивимося в код: deque в ньому тільки одне (Mylist), ітерація по ньому - теж (рядки 114-115). Тепер самі подивіться, де там змінюється цей deque.
Чому так не можна робити? Бо ітератор не знає, що сталося з MyList, і намагатиметься брати елементи там, де їх, цілком можливо, вже нема.
Скажіть, а вам самому не нудно писати 7 разів один і той самий код? Написали б функцію, що повертає потрібну вам функцію, для відповідної ноти.

Чесно кажучи,я не зовсім Вас зрозумів. Можете допомогти більш практично?
deque змінюється щорозу як я заходжу в функцію,і тоді проблема в його зміні? Щоб ліквідувати першочергову проблему слід,щоб deque не змінювався?

17

(24 відповідей, залишених у Python)

Всім доброго часу доби! Виникла маленька проблема. Є код "піаніно".

from tkinter import *
from PIL import Image, ImageTk
from pygame import mixer
import time
from collections import deque

root =Tk()

a = int(10)

global Mylist 
Mylist = deque()

def plus():
    
    global a
    a = int(a)
    a += 30

    c.create_line(0,50,500+a*2,50,width=2,fill="black")
    c.create_line(0,70,500+a*2,70,width=2,fill="black")
    c.create_line(0,90,500+a*2,90,width=2,fill="black")
    c.create_line(0,110,500+a*2,110,width=2,fill="black")
    c.create_line(0,130,500+a*2,130,width=2,fill="black")

     
def do(event):

    c.create_image(0+a,140,image=DO)
    plus()
    
    mixer.init()
    mixer.music.load('1.mp3')
    mixer.music.play()
    time.sleep(0.5)
    mixer.music.stop()
    
    
    Mylist.append(do)
    
    
def re(event):
    
    c.create_image(0+a,130,image=RE)
    plus()
    
    mixer.init()
    mixer.music.load('2.mp3')
    mixer.music.play()
    time.sleep(2)
    mixer.music.stop()
    
    Mylist.append(re) 

def mi(event):
    c.create_image(0+a,125,image=RE)
    plus()
    mixer.init()
    mixer.music.load('2.mp3')
    mixer.music.play()
    time.sleep(2)
    mixer.music.stop()
    
    Mylist.append(mi)

def fa(event):
    c.create_image(0+a,118,image=RE)
    plus()
    mixer.init()
    mixer.music.load('2.mp3')
    mixer.music.play()
    time.sleep(2)
    mixer.music.stop()
    
    Mylist.append(fa)
    
def so(event):
    c.create_image(0+a,105,image=RE)
    plus()
    mixer.init()
    mixer.music.load('2.mp3')
    mixer.music.play()
    time.sleep(2)
    mixer.music.stop()
    
    Mylist.append(so)
    
def lu(event):
    c.create_image(0+a,96,image=RE)
    plus()
    mixer.init()
    mixer.music.load('2.mp3')
    mixer.music.play()
    time.sleep(2)
    mixer.music.stop()
    
    Mylist.append(lu)
    
def si(event):
    c.create_image(0+a,86,image=RE)
    plus()
    mixer.init()
    mixer.music.load('2.mp3')
    mixer.music.play()
    time.sleep(2)
    mixer.music.stop()
    
    Mylist.append(si)
    
def bu(event):
    root.destroy()

def play(event):
    for play_note in Mylist:
        play_note(event)
        

A = dict(do=do,re=re,mi=mi,fa=fa,so=so,lu=lu,si=si)

c = Canvas(width=500,height=300,bg="white",cursor="pencil")

c.create_line(0,50,500,50,width=2,fill="black")
c.create_line(0,70,500,70,width=2,fill="black")
c.create_line(0,90,500,90,width=2,fill="black")
c.create_line(0,110,500,110,width=2,fill="black")
c.create_line(0,130,500,130,width=2,fill="black")

pilImage = Image.open("notaall.png")
DO= ImageTk.PhotoImage(pilImage)

pillImageRe = Image.open('notaall.png')
RE = ImageTk.PhotoImage(pillImageRe)

scr = Scrollbar(root)
scr.config(command = c.xview,orient = HORIZONTAL )


but = Button(root,text='Press to destroy window')
but.place(x=0,y=0)
but2 = Button(root,text = 'Press to replay')
but2.place(x =200,y = 0) 
but2.bind('<Button-1>',play)
but.bind('<Button-1>',bu)

root.bind('k',do)
root.bind('s',re)
root.bind('d',mi)
root.bind('f',fa)
root.bind('g',so)
root.bind('h',lu)
root.bind('j',si)
c.pack()
scr.pack()

root.mainloop()

Все працює коректно,за винятком кнопки реплею. Я від неї хочу щоб вона програла всі ноти ще раз,а вона натомість програє лише одну ноту й видає таку помилку. Буду вдячний за пораду

18

(16 відповідей, залишених у Python)

from cx_Freeze import setup, Executable
import os
import sys

os.environ['TCL_LIBRARY'] = 'c:/python/tcl/tcl8.6'
os.environ['TK_LIBRARY'] = 'c:/python/tcl/tk8.6'

buildOptions = dict (
    packages = ['os','tkinter','matplotlib','numpy'],
    excludes = [],
    include_files = ['c:/python/DLLs/tcl86t.dll', 'c:/python/DLLs/tk86t.dll']
    )
base = 'Win32GUI' if sys.platform=='win32' else None    


executables = [
    Executable('plot.py', base=base)
]

setup(name='editor',
      version = '1.0',
      description = '',
      options = dict(build_exe = buildOptions),
      executables = executables)

Так працює

19

(16 відповідей, залишених у Python)

0xDADA11C7 написав:

По-перше це дивно уживати абсолютні шляхи до бібліотек(навіть якщо відкомпілиться то працювати на иншій машині не буде), по-друге спробуйте зберегти потрібну бібліотеку(mathplotlib) у теці вашого проєкта.

А такого я не знаходжу

20

(16 відповідей, залишених у Python)

Kizyak написав:

Навіщо, навіщо це робити?

Тобто?
Що тут такого?
Виникло питання,після доволі тривалих пошуків в Інтернеті,на жаль не вдалих,я запитав на форумі.