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

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

在 Tkinter 中為自動(dòng)完成條目小部件設(shè)置默認(rèn)文本

在 Tkinter 中為自動(dòng)完成條目小部件設(shè)置默認(rèn)文本

瀟瀟雨雨 2022-07-19 20:42:51
我正在使用具有一些簡單字段的 tkinter 構(gòu)建一個(gè) GUI。我想出了如何使用 Entry 小部件的 textvariable 參數(shù)為它們默認(rèn)值(我將這些值從 .pickle 文件加載到字典),但是我構(gòu)建了一個(gè)字段以在用戶輸入值時(shí)使用自動(dòng)完成. 這是一個(gè)單獨(dú)的類,我使用了在這里找到的代碼。我已經(jīng)嘗試了很多方法來在啟動(dòng)應(yīng)用程序時(shí)加載這個(gè)小部件中的值,比如返回值和使用 set() 方法,但我沒有成功。我要么得到錯(cuò)誤,要么什么也沒發(fā)生。我在小部件中輸入的值確實(shí)會(huì)成功保存到我的泡菜文件中。我還在用python學(xué)習(xí)面向?qū)ο缶幊?,所以?qǐng)放輕松。那么如何修改下面的代碼以顯示默認(rèn)值?from Tkinter import *import relista = ['a', 'actions', 'additional', 'also', 'an', 'and', 'angle', 'are', 'as', 'be', 'bind','bracket', 'brackets', 'button', 'can', 'cases', 'configure', 'course', 'detail', 'enter', 'event', 'events', 'example', 'field', 'fields', 'for', 'give', 'important', 'in', 'information', 'is', 'it', 'just', 'key', 'keyboard', 'kind', 'leave', 'left', 'like', 'manager', 'many', 'match', 'modifier', 'most', 'of', 'or', 'others', 'out', 'part', 'simplify', 'space', 'specifier', 'specifies', 'string;', 'that', 'the', 'there', 'to', 'type', 'unless', 'use', 'used', 'user', 'various', 'ways', 'we', 'window', 'wish', 'you']class AutocompleteEntry(Entry):    def __init__(self, lista, *args, **kwargs):        Entry.__init__(self, *args, **kwargs)        self.lista = lista                self.var = self["textvariable"]        if self.var == '':            self.var = self["textvariable"] = StringVar()        self.var.trace('w', self.changed)        self.bind("<Right>", self.selection)        self.bind("<Up>", self.up)        self.bind("<Down>", self.down)        self.lb_up = False
查看完整描述

2 回答

?
青春有我

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

有一個(gè)現(xiàn)有的 AutocompleteEntry 小部件。


例子:


from ttkwidgets.autocomplete import AutocompleteEntry

import tkinter as tk


window = tk.Tk()


Label1 = tk.Label(window, text="Entry:")

Label1.pack(side='left', padx=10, pady=10)


test_values = ['one', 'two', 'three']


test_var = tk.StringVar(window)

test_var.set('Default Value')


Entry1 = AutocompleteEntry(window, width=20, textvariable=test_var, completevalues=test_values)

Entry1.pack(side='left', padx=10, pady=10)


window.mainloop()


查看完整回答
反對(duì) 回復(fù) 2022-07-19
?
小唯快跑啊

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

好的,在分析了這段代碼幾個(gè)小時(shí)后,我想出了如何使用該insert()方法將值設(shè)為默認(rèn)值。這樣做后我的第一個(gè)問題是列表框在應(yīng)用程序啟動(dòng)時(shí)默認(rèn)也是活動(dòng)的。通過向changed函數(shù)添加另一個(gè) if 條件,它不會(huì)打開列表框,直到值被清除。當(dāng)我添加條件語句時(shí),該行在self.lb.destroy()清除字段時(shí)會(huì)引發(fā)錯(cuò)誤:


AttributeError:“AutocompleteEntry”對(duì)象沒有屬性“l(fā)b”


我不確定為什么會(huì)拋出這個(gè)錯(cuò)誤,因?yàn)樗谖姨砑訔l件之前就起作用了。但是,lb未在類或函數(shù)的其他任何地方定義。刪除該行修復(fù)了錯(cuò)誤,一切似乎都按預(yù)期工作。這是我所做的更改。如果其他人有更好的解決方案,請(qǐng)告訴我。


class AutocompleteEntry(Entry):

    # add settings argument which is True or False    

    def __init__(self, lista, settings, *args, **kwargs):


        Entry.__init__(self, *args, **kwargs)

        self.lista = lista

        # define the self.settings object

        self.settings = settings

        self.var = self["textvariable"]

        if self.var == '':

            self.var = self["textvariable"] = StringVar()

        self.var.trace('w', self.changed)

        self.bind("<Return>", self.selection)

        self.bind("<Up>", self.up)

        self.bind("<Down>", self.down)


        self.lb_up = False


    def changed(self, name, index, mode):


        if self.var.get() == '':

            # self.lb.destroy() - removed this line

            self.lb_up = False

            # change this variable to False once the field is cleared

            self.settings = False 

        # add if condition - field is not empty and settings is True

        elif self.var.get() != '' and self.settings == True:

            self.lb_up = False

        else:

            words = self.comparison()

            if words:

                if not self.lb_up:

                    self.lb = Listbox()

                    self.lb.bind("<Double-Button-1>", self.selection)

                    self.lb.bind("<Return>", self.selection)

                    self.lb.place(x=self.winfo_x(), y=self.winfo_y()+self.winfo_height())

                    self.lb_up = True


                self.lb.delete(0, END)

                for w in words:

                    self.lb.insert(END,w)

            else:

                if self.lb_up:

                    self.lb.destroy()

                    self.lb_up = False

最后一部分:


if __name__ == '__main__':

    root = Tk()

    # define settings variable and add to AutoCompleteEntry arguments

    settings = True

    entry = AutocompleteEntry(lista, settings, root)

    entry.insert(END, "this is the default value")

    entry.grid(row=0, column=0)

    Button(text='nothing').grid(row=1, column=0)

    Button(text='nothing').grid(row=2, column=0)

    Button(text='nothing').grid(row=3, column=0)


    root.mainloop()


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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