簡體   English   中英

TkInter輸入框被禁用

[英]TkInter Entry Box Being Disabled

我正在使用Tkinter開發GUI Python程序。

我有一個按下按鈕(以及加載程序時)的功能。 該程序當前尚未完成,僅在當前點檢查數據驗證。 由於默認條目當前無效,因此會引發錯誤。

但是,此后,輸入框將被禁用,並且不允許我輸入任何數據。 我不知道為什么會這樣,我想知道是否有人可以告訴我原因,以便我可以解決問題。

謝謝

import sys
import random
from tkinter import *
from tkinter import ttk
from tkinter import messagebox

root = Tk()
root.title("COSC110 - Guessing Game")
hint = StringVar()
guesses = []
guess_input = ''

def loadWordList(filename): #Load the words from a file into a list given a filename.
    file = open(filename, 'r')
    line = file.read().lower()
    wordlist = line.split()

    return wordlist

word = random.choice(loadWordList('words.txt'))

def getHint(word, guesses): #Get hint function, calculates and returns the current hint.
    hint = ' '
    for letter in word:
        if letter not in guesses:
            hint += '_ '
        else:
            hint += letter

    return hint

def guessButton(guess, word, guesses):
    guess = str(guess_input)
    guess = guess.lower()

    if not guess.isalpha():
        is_valid = False
    elif len(guess) !=1:
        is_valid = False
    else:
        is_valid = True

    while is_valid == False:
        messagebox.showinfo("Error:","Invalid input. Please enter a letter from a-z.")
        break

    hint.set(getHint(word, guesses))
    return hint

label_instruct = Label(root, text="Please enter your guess: ")
label_instruct.grid(row=1,column=1,padx=5,pady=10)

guess_input = Entry(root,textvariable=guess_input)
guess_input.grid(row=1, column=2)

guess_button = Button(root, text="Guess", width=15, command=guessButton(guess_input,word,guesses))
guess_button.grid(row=1, column=3,padx=15)

current_hint = Label(root, textvariable=hint)
current_hint.grid(column=2,row=2)

label_hint = Label(root, text="Current hint:")
label_hint.grid(column=1,row=2)

label_remaining = Label(root, text="Remaining guesses: ")
label_remaining.grid(column=1,row=3)

root.mainloop() # the window is now displayed

任何提示表示贊賞。

有兩個明顯的問題。

首先,您不應該使用

guess_button = Button(root, text="Guess", width=15, command=guessButton(guess_input,word,guesses))

因為您不能在命令config上調用帶有參數的函數。

我的建議是在這里使用建議的方法之一,我特別喜歡使用functoolspartial方法的方法:

from functools import partial
#(...)
button = Tk.Button(master=frame, text='press', command=partial(action, arg))

action是您要調用的函數, arg您要調用的參數以逗號分隔。

其次,您正在使用

guess = str(guess_input)

它不返回Entry類型的文本,請改用

guess = guess_input.get()

PS:盡管與您的問題沒有直接關系,但您應該使用

if var is False:

代替

if var == False:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM