第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

嘗試制作根據(jù)聲音改變顏色的紅綠燈(響亮的聲音 = 紅色,正常聲音 = 綠色等)

嘗試制作根據(jù)聲音改變顏色的紅綠燈(響亮的聲音 = 紅色,正常聲音 = 綠色等)

www說 2021-10-26 15:32:41
我一直在嘗試制作一個 Tkinter 應用程序,它可以作為所產生聲音的反饋信號燈。例如,當圖書館里的聲音越來越大時,您會看到紅燈,但是當它正常時,則是綠燈,依此類推。基本上,我已經創(chuàng)建了一個帶有畫布的 Tkinter 應用程序,并在矩形(紅綠燈)中制作了 3 個圓圈,還制作了一個功能來從您的麥克風獲取輸入以查看聲音的高低。此代碼在單獨的文件中制作以獲取輸入聲音:def decide_colour():    def print_sound(indata, outdata, frames,tijd, status):        global colour        volume_norm = np.linalg.norm(indata)        print(volume_norm)        time.sleep(1)        #set fill colour        if volume_norm > 2 and volume_norm <4:            colour = "yellow"        elif volume_norm > 4:            colour = "red"        else:            colour = "green"        print(colour)    with sd.Stream(callback=print_sound):        sd.sleep(duration * 1000)decide_colour()這是應該顯示它的 tkinter 應用程序:class TrafficLights:    def __init__(self):        root = Tk()        root.title("Stoplicht")        root.configure(bg='black')        root.geometry('460x400')        # Frame voor widgets        frame = Frame(root)        frame.grid()        self.colour = StringVar()        # canvas voor lichten        self.canvas = Canvas(root, width=460, height=400, bg="black")        self.canvas.create_rectangle(190, 10, 310, 350, outline='white', fill='black')        self.canvas.grid()        self.oval_red = self.canvas.create_oval(200, 20, 300, 120, fill="white")        self.oval_yellow = self.canvas.create_oval(200, 130, 300, 230, fill="white")        self.oval_green = self.canvas.create_oval(200, 240, 300, 340, fill="white")        # kleurbepaling voor de cirkels但它陷入了一個循環(huán)。并且通過擺脫while聲明,它只會打開一次。但我希望它繼續(xù)運行,我希望它改變紅綠燈的顏色。我已經嘗試了幾天,尋找答案。但我現(xiàn)在真的被困住了。
查看完整描述

2 回答

?
哆啦的時光機

TA貢獻1779條經驗 獲得超6個贊

問題似乎與您的程序的組織有關。while不需要那個循環(huán)。我做了一個簡單的例子,說明如何after工作。在after循環(huán)中調用的函數(shù)應該從decide_colour()函數(shù)中獲取它需要的數(shù)據(jù)。在這個例子中,它將是my_count().


from tkinter import *


class Counter(Frame):


    def __init__(self, master=None):

        self.count = 0

        super().__init__(master)

        self.grid()

        self.__create_widgets()


    def __create_widgets(self):

        self.count_label         = Label(self)

        self.count_label["text"] = str(self.count)

        self.count_label["pady"] = 5

        self.count_label.grid()



    def my_count(self):

        self.count = self.count+1

        self.count_label["text"] = str(self.count)



root = Tk()

counter = Counter(master=root)


#do you app set up here

root.title("Counter")

root.geometry('460x400')


def do_one_iteration():

    counter.my_count()

    root.after(500, do_one_iteration)

do_one_iteration()


counter.mainloop()


查看完整回答
反對 回復 2021-10-26
?
料青山看我應如是

TA貢獻1772條經驗 獲得超8個贊

好吧,這不是我想要的答案,但它仍然是一個答案


我把代碼放在一起,經過一些調整,我來到了這個。


from tkinter import *

import sounddevice as sd

import numpy as np

import time


duration = 1  #



def decide_colour():

    def print_sound(indata, outdata, frames, tijd, status):

        global colour

        volume_norm = np.linalg.norm(indata)

        time.sleep(1)


        # set fill colour

        if 2 < volume_norm < 4:

            colour = "yellow"

        elif volume_norm > 4:

            colour = "red"

        else:

            colour = "green"


        print(volume_norm, colour)


    with sd.Stream(callback=print_sound):

        sd.sleep(duration * 1000)



class TrafficLights:


    def __init__(self):


        root = Tk()

        root.title("Stoplicht")

        root.configure(bg='black')

        root.geometry('460x400')


        # Frame voor widgets

        frame = Frame(root)

        frame.grid()


        self.colour = StringVar()


        # canvas voor lichten

        self.canvas = Canvas(root, width=460, height=400, bg="black")

        self.canvas.create_rectangle(190, 10, 310, 350, outline='white', fill='black')

        self.canvas.grid()


        self.oval_red = self.canvas.create_oval(200, 20, 300, 120, fill="red")

        self.oval_yellow = self.canvas.create_oval(200, 130, 300, 230, fill="white")

        self.oval_green = self.canvas.create_oval(200, 240, 300, 340, fill="white")


    def create_frame():

        decide_colour()


        if colour == 'red':

            self.canvas.itemconfig(self.oval_red, fill="red")

            self.canvas.itemconfig(self.oval_yellow, fill="white")

            self.canvas.itemconfig(self.oval_green, fill="white")

        elif colour == 'yellow':

            self.canvas.itemconfig(self.oval_red, fill="white")

            self.canvas.itemconfig(self.oval_yellow, fill="yellow")

            self.canvas.itemconfig(self.oval_green, fill="white")

        elif colour == 'green':

            self.canvas.itemconfig(self.oval_red, fill="white")

            self.canvas.itemconfig(self.oval_yellow, fill="white")

            self.canvas.itemconfig(self.oval_green, fill="green")


        create_frame()


        root.update()

        time.sleep(1)

        root.destroy()

        return



while True:

    TrafficLights()

所以現(xiàn)在它在一秒鐘后打開一個新的主循環(huán)并破壞之前的主循環(huán)。我實際上希望它在一個主循環(huán)中更新,但不知道如何更新,所以如果有人知道請告訴我


查看完整回答
反對 回復 2021-10-26
  • 2 回答
  • 0 關注
  • 256 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號