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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Python/Tkinter:使用按鈕控制 for 循環(huán)

Python/Tkinter:使用按鈕控制 for 循環(huán)

尚方寶劍之說(shuō) 2022-10-25 15:07:36
我有一個(gè)for循環(huán),旨在遍歷列表,在 tkinter 中顯示一些項(xiàng)目,等待按下按鈕,然后存儲(chǔ)一些Entry和Checkbutton數(shù)據(jù)。下面的代碼是我正在嘗試做的基礎(chǔ)知識(shí)的 MRE。在下面的情況下,當(dāng)Button被擊中時(shí),我想返回loop_function并從button_function.我想也許使用類似lambda: continue或lambda: return可能將其帶回第一個(gè)功能的東西,但那些會(huì)拋出錯(cuò)誤。有任何想法嗎?from tkinter import *class TestClass(Frame):    def __init__(self, parent=None):        self.parent = parent        Frame.__init__(self)        self.main = self.master        self.f = Frame(self.parent)        self.f.pack()        (Button(self.f, text='Start',             command = self.loop_function)            .grid(column=0, row=0, padx=10, pady=10))    def loop_function(self):        name_list = ['Luke', 'Han', 'Leia', 'Chewie']        for n in name_list:            self.button_function(n)            force_user = self.fu.get()            side = self.sd.get()            print(n, force_user, side)    def button_function(self, n):        self.fu = IntVar(value=1)        self.sd = StringVar(value='rebel')        self.fu_e = Checkbutton(self.f, variable=self.fu)        self.sd_e = Entry(self.f, textvariable=self.sd)        col = 0        lbl_list = ['Name', 'Force User?', 'Side']        for l in lbl_list:            (Label(self.f, text=l, width=11, anchor=W)                .grid(column=col, row=0, padx=10, pady=10))            col += 1        (Label(self.f, text=n, width=11, anchor=W)            .grid(column=0, row=1, padx=5))        self.fu_e.grid(column=1, row=1)        self.sd_e.grid(column=2, row=1)        (Button(self.f, text='Save',             command = lambda: print('WAIT HERE!!'))            .grid(column=1, row=2, padx=10, pady=10))if __name__ == '__main__':    root=Tk()    ui = TestClass(root)    ui.pack()    root.mainloop()
查看完整描述

1 回答

?
Qyouu

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超11個(gè)贊

我認(rèn)為以下代碼可以完成您想做的事情。單擊按鈕Start后,用戶會(huì)看到一個(gè)對(duì)話框,她可以在其中輸入第一個(gè)用戶Luke的屬性。通過單擊按鈕保存輸入的數(shù)據(jù)以某種方式存儲(chǔ)。然后可以編輯下一個(gè)用戶 ( Han )的屬性。


for 循環(huán)在這里不是正確的方法。相反,我們想監(jiān)聽開始和保存按鈕的點(diǎn)擊事件。在我的解決方案中,當(dāng)用戶單擊Start時(shí),將調(diào)用事件處理程序pick_next_player。next此方法總是從我環(huán)繞的迭代器中挑選元素name_list。然后 GUI 元素將使用您的button_function.


事件處理程序save_action偵聽保存按鈕的單擊事件。它收集用戶輸入的值,將其存儲(chǔ)到self.results并通過調(diào)用顯示下一個(gè)玩家pick_next_player。


當(dāng)最后一個(gè)玩家被保存后,這個(gè)腳本只會(huì)在控制臺(tái)打印一行'finished ...'。我假設(shè)您要停止腳本或關(guān)閉那里的對(duì)話框。但這當(dāng)然取決于你。


from tkinter import *



class TestClass(Frame):

    def __init__(self, parent=None):

        self.parent = parent

        Frame.__init__(self)

        self.main = self.master

        self.f = Frame(self.parent)

        self.f.pack()


        (

            Button(self.f, text='Start', command=self.pick_next_player)

                .grid(column=0, row=0, padx=10, pady=10)

        )


        self.name_list = ['Luke', 'Han', 'Leia', 'Chewie']

        self.name_iter = iter(self.name_list)

        self.results = []

        self.current_name = None


    def pick_next_player(self):

        try:

            self.current_name = next(self.name_iter)

        except StopIteration:

            print(f"finished: {self.results}")

            return


        self.button_function()


    def button_function(self):

        self.fu = IntVar(value=1)

        self.sd = StringVar(value='rebel')


        self.fu_e = Checkbutton(self.f, variable=self.fu)

        self.sd_e = Entry(self.f, textvariable=self.sd)


        col = 0

        lbl_list = ['Name', 'Force User?', 'Side']

        for l in lbl_list:

            (Label(self.f, text=l, width=11, anchor=W)

             .grid(column=col, row=0, padx=10, pady=10))

            col += 1


        (

            Label(self.f, text=self.current_name, width=11, anchor=W)

                .grid(column=0, row=1, padx=5)

        )

        self.fu_e.grid(column=1, row=1)

        self.sd_e.grid(column=2, row=1)

        (

            Button(self.f, text='Save', command=self.save_action)

                .grid(column=1, row=2, padx=10, pady=10)

        )


    def save_action(self):

        force_user = self.fu.get()

        side = self.sd.get()

        print(f"saving {self.current_name}, {force_user}, {side}")

        self.results.append({'name': self.current_name, 'force': force_user, 'faction': side})

        self.pick_next_player()



if __name__ == '__main__':

    root = Tk()

    ui = TestClass(root)

    ui.pack()

    root.mainloop()




查看完整回答
反對(duì) 回復(fù) 2022-10-25
  • 1 回答
  • 0 關(guān)注
  • 281 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)