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

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

如果 Tkinter Widget 中的條目已更正,我如何使 tkinter 消息消失?

如果 Tkinter Widget 中的條目已更正,我如何使 tkinter 消息消失?

阿晨1998 2023-05-09 15:19:58
我創(chuàng)建了一個按鈕,如果按下該按鈕,它會指向檢查功能,這是對用戶輸入小部件的一種驗證檢查。如果用戶輸入的名字包含字母以外的任何內(nèi)容,它應(yīng)該在坐標 (200, 500) 處給出無效檢查消息,如果姓氏有這樣的錯誤,則應(yīng)該在 (200, 700) 處給出一條消息 - - 否則屏幕應(yīng)進入下一個屏幕。但是,如果我輸入一個錯誤的條目和一個正確的條目,盡管消息出現(xiàn)在正確的位置 - 當我現(xiàn)在將錯誤的條目正確和正確的條目輸入錯誤時,消息不會從一個位置消失,而是保持原樣并且另一條消息出現(xiàn)在另一個位置(現(xiàn)在有 2 條消息,即使只有一個條目是錯誤的)如果這令人困惑,我很抱歉,但簡而言之,我的目標是該消息應(yīng)該只出現(xiàn)在條目出錯的坐標上,并在條目被更正后消失。我應(yīng)該如何更改我的代碼以確保這一點?def check(FName_Entry, LName_Entry):if not FName_Entry.get().isalpha():    errormsg = Message(root, text = 'Invalid entry', anchor = CENTER)    canvas.create_window(200, 500, anchor=NW, window = errormsg)    #messagebox.showerror('Only letters', 'Only letters are allowed!')if not LName_Entry.get().isalpha():    errormsg2 = Message(root, text='Invalid entry', anchor=CENTER)    canvas.create_window(200, 700, anchor=NW, window=errormsg2)if FName_Entry.get().isalpha() and LName_Entry.get().isalpha():    canvas.delete("all"). . . .Next_button = Button(root, text="Next", anchor=CENTER, command=lambda: check(FName_Entry, LName_Entry))    Next_button.configure(width=10, bg="black", fg="blue", border=10)    canvas.create_window(920, 450, anchor=NW, window=Next_button)
查看完整描述

1 回答

?
慕無忌1623718

TA貢獻1744條經(jīng)驗 獲得超4個贊

我假設(shè)這是您在選擇您是用戶還是司機后到達的部分。如果我們堅持我在你的另一篇文章中給你的例子:


新配置.py


from dataclasses import dataclass, asdict



#to make things more complicated and force you to get better

#create a dataclass of default properties

@dataclass

class Button_dc:

    bg:    str = "white"

    fg:    str = "gray20"

    font:  str = 'Calibri 14 bold'

    border:int = 10


    

#make a dict instance of the dataclass    

DefaultButton = asdict(Button_dc())

#make a slightly different instance

UserRoleButton = asdict(Button_dc(font='Calibri 24 bold'))



@dataclass

class Label_dc:

    bg:    str = "steel blue"

    fg:    str = "gray20"

    font:  str = 'Calibri 14 bold'

    

DefaultLabel = asdict(Label_dc())



@dataclass

class Entry_dc:

    bg:    str = "white"

    fg:    str = "gray20"

    font:  str = 'Calibri 14 bold'

    width: int = 30

    

DefaultEntry = asdict(Entry_dc())


@dataclass

class Message_dc:

    bg:    str = "red"

    fg:    str = "white"

    font:  str = 'Calibri 14 bold'

    width: int = 150

    

DefaultMessage = asdict(Message_dc())

在main.py中選擇整個user_form方法并將下面的整個粘貼到它的位置


    def user_form(self, type, fname=None, lname=None):

        self.canvas.delete("all")

        

        self.canvas.create_window(10, 10, anchor='nw', window=tk.Label(self, text="First Name:", **cfg.DefaultLabel))

        

        fname_ent = tk.Entry(self, **cfg.DefaultEntry)

        if fname != None:

            fname_ent.insert('end', fname)

        self.canvas.create_window(120, 10, anchor='nw', window=fname_ent)

        

        self.canvas.create_window(10, 40, anchor='nw', window=tk.Label(self, text="Last Name:", **cfg.DefaultLabel))

        

        lname_ent = tk.Entry(self, **cfg.DefaultEntry)

        if lname != None:

            lname_ent.insert('end', lname)

        self.canvas.create_window(120, 40, anchor='nw', window=lname_ent)

        

        #don't send the entire Entry to the check ~ only the data you want to check

        form_next_btn = tk.Button(self, text="next", command=lambda: self.check(type, fname_ent.get(), lname_ent.get()), **cfg.DefaultButton)

        self.fnb = self.canvas.create_window(500, 340, anchor='nw', window=form_next_btn)

        

    def check(self, type, fname, lname):

        self.canvas.delete(self.fnb)

        

        f = fname.isalpha()

        l = lname.isalpha()

        

        if f and l:

           self.process(type, fname, lname)

           return

        

        if not f:

            errormsg = tk.Message(self, text='Invalid entry for first name', **cfg.DefaultMessage)

            self.canvas.create_window(10, 90, anchor='nw', window=errormsg)

            

        if not l:

            errormsg2 = tk.Message(self, text='Invalid entry for last name', **cfg.DefaultMessage)

            self.canvas.create_window(10 if f else 170, 90, anchor='nw', window=errormsg2)

            

        back_btn = tk.Button(self, text="back", command=lambda: self.user_form(type, fname if f else None, lname if l else None), **cfg.DefaultButton)

        self.canvas.create_window(500, 340, anchor='nw', window=back_btn)

        

    def process(self, type, fname, lname):

        self.canvas.delete("all")

        

        if type is Role.User:

            print(f'{fname} {lname} is a user')

        elif type is Role.Driver:

            print(f'{fname} {lname} is a driver')

旁白:請記住,我根本沒有嘗試讓您的應(yīng)用程序漂亮。我只是向您展示如何讓它發(fā)揮作用。我也沒有寫出我最好的代碼。我會做所有這些完全不同的事情。我正在討論你的canvas方法并給你一些理智的東西。在我看來,您使用畫布的全部原因只是為了擁有一個圓角矩形。這似乎不值得,但這不是我的決定。


然而,這些概念并不糟糕,而且在適當?shù)纳舷挛闹锌梢苑浅姶?。讓我們以dataclasses, 為例。想象一下,如果您真的想執(zhí)行以下操作。您最終會得到一個完全自定義的Text小部件和一種非常簡單的方法來僅更改您需要更改的內(nèi)容,同時保留您分配的所有其他內(nèi)容。我dataclasses為您編寫的是一些示例概念。你可以把這些概念帶得更遠。


@dataclass 

class Text_dc:

    background:         str         = Theme.Topcoat     # main element

    foreground:         str         = Theme.Flat

    borderwidth:        int         = 0

    selectbackground:   str         = Theme.Primer      # selected text

    selectforeground:   str         = Theme.Accent

    selectborderwidth:  int         = 0                 # doesn't seem to do anything ~ supposed to be a border on selected text

    insertbackground:   str         = Theme.Hilight     # caret

    insertborderwidth:  int         = 0                 #   border

    insertofftime:      int         = 300               #   blink off millis

    insertontime:       int         = 600               #   blink on millis

    insertwidth:        int         = 2                 #   width

    highlightbackground:int         = Theme.Topcoat     # inner border that is activated when the widget gets focus

    highlightcolor:     int         = Theme.Topcoat     #   color

    highlightthickness: int         = 0                 #   thickness

    cursor:             str         = 'xterm'

    exportselection:    int         = 1

    font:               str         = 'calibri 14'

    width:              int         = 16                # characters    ~ often this is ignored as Text gets stretched to fill its parent

    height:             int         = 8                 # lines         ~ "               "               "               "               "

    padx:               int         = 2

    pady:               int         = 0

    relief:             str         = 'flat'

    wrap:               str         = 'word'            # "none", 'word'

    spacing1:           int         = 0                 # space above every line

    spacing2:           int         = 0                 # space between every wrapped line

    spacing3:           int         = 0                 # space after return from wrap (paragraph)

    state:              str         = 'normal'          # NORMAL=Read/Write | DISABLED=ReadOnly

    tabs:               str         = '4c'

    takefocus:          int         = 1

    undo:               bool        = True

    xscrollcommand:     Callable    = None

    yscrollcommand:     Callable    = None


#common difference

NoWrap      = asdict(Text_dc(**{'wrap':'none'}))

NWReadOnly  = asdict(Text_dc(**{'wrap':'none','state':'disabled'}))

ReadOnly    = asdict(Text_dc(**{'state':'disabled'}))

DefaultText = asdict(Text_dc())

您可以以不同的方式使用該概念。假設(shè)您想要一個完全自定義的Text小部件,并且您打算做的不僅僅是重新設(shè)計它。下面是一個快速而骯臟的例子


class ScriptEditor(tk.Text):

    def __init__(self, master, **kwargs):

        tk.Text.__init__(self, master, **asdict(Text_dc(font='Consolas 14', **kwargs)))


    def syntax_highlight(self):

        pass



#all the other **kwargs are defaulted internally, 

#but we want to adjust the size for this instance

editor = ScriptEditor(root, width=120, height=80)


查看完整回答
反對 回復(fù) 2023-05-09
  • 1 回答
  • 0 關(guān)注
  • 133 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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