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

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

使用 Tkinter 時(shí)如何從 GUI 中分離數(shù)據(jù)

使用 Tkinter 時(shí)如何從 GUI 中分離數(shù)據(jù)

瀟湘沐 2023-06-13 14:47:45
我對(duì)使用 Tkinter 進(jìn)行設(shè)計(jì)的正確方法感到困惑。我已經(jīng)閱讀了數(shù)十個(gè) Tkinter 示例,但由于它們中的大多數(shù)都描述了簡(jiǎn)單和具體的案例,所以我在為我的腳本找到正確的全局設(shè)計(jì)時(shí)遇到了麻煩。我正在嘗試盡可能多地將 GUI 代碼與數(shù)據(jù)模型分開(我正在開發(fā)一個(gè)非常簡(jiǎn)單的紙牌游戲)。我的主要問題是如何從不同的函數(shù)和類全局訪問 Tkinter 元素。目前,我正在一個(gè)大型 gui_build() 函數(shù)中構(gòu)建整個(gè)界面,就在我的數(shù)據(jù)類定義之后。從 main() 函數(shù)調(diào)用此函數(shù)以及所有數(shù)據(jù)初始化內(nèi)容。問題是,即使我從 gui_build() 返回 Tk 根對(duì)象以便 main() 可以傳遞它,我在需要時(shí)也無法訪問 Tk 元素。例如,我有幾個(gè)回調(diào)函數(shù)用于全局范圍內(nèi)的不同 Tk 按鈕。如果其中一個(gè)需要檢查單選按鈕的狀態(tài),顯然不可能通過名稱在 Tk 根層次結(jié)構(gòu)中找到它,并且到處傳遞對(duì)單選按鈕的引用似乎非常不雅。我可以通過全局聲明單選按鈕來使其工作,但這違背了將所有 GUI 代碼保存在同一位置的目的。在嘗試重新發(fā)明輪子之前想知道什么可以被視為“最佳實(shí)踐”。
查看完整描述

1 回答

?
陪伴而非守候

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

我制作 Tkinter 界面已有 2 年了,現(xiàn)在。我最初面臨同樣的問題。根據(jù)我的經(jīng)驗(yàn),我建議您定義一個(gè)繼承Tk根小部件的類,然后將元素小部件指定為該類的屬性,并將回調(diào)函數(shù)指定為該類的函數(shù)。這將使訪問全局小部件(按鈕)和功能變得容易。這些小部件和函數(shù)在類定義中是全局的。它使它們易于訪問。您可以按照以下模板


from tkinter import *


class Interface(Tk):

    def __init__(self, title):

        Tk.__init__(self)

        self.title(title)

        self.build()

    

    def build(self):

        self.UserNameLabel = Label(self, text="User Name")

        self.UserNameLabel.grid(row=0, column=0, sticky=E, pady=10)

        

        self.UserNameEntry = Entry(self)

        self.UserNameEntry.grid(row=0, column=1, sticky=W, pady=10)

        

        self.PassWordLabel = Label(self, text="Password")

        self.PassWordLabel.grid(row=1, column=0, sticky=E, pady=10)

        

        self.PassWordEntry = Entry(self, show='*')

        self.PassWordEntry.grid(row=1, column=1, sticky=W, pady=10)

        

        self.status = Label(self, text='Please enter User Name and Password')

        self.status.grid(row=2, column=0, columnspan=2, pady=10)

        

        self.LoginButton = Button(self, text='Login', width=20, command=self.checkCreadentials)

        self.LoginButton.grid(row=3, column=0, columnspan=2, pady=10)

    

    def checkCreadentials(self):

        if (self.UserNameEntry.get().strip() == 'username') and (self.PassWordEntry.get()=='password'):

            self.status['text']= 'Welcome !'

        else:

            self.status['text']= 'Invalid User Name or Password!!!'

            self.bell()

        

Interface('Login').mainloop()


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

添加回答

舉報(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)