gpt4 book ai didi

python - 有没有办法在 Entry() 中存在 int 之前使 OptionMenu() 不可用?

转载 作者:太空宇宙 更新时间:2023-11-03 21:19:56 25 4
gpt4 key购买 nike

我正在为我的代码制作一个 GUI,我需要获取一些用户输入。我有一个 Entry() 和一个 OptionMenu(),我希望 OptionMenu() 在范围(1,在 Entry() + 1 中输入的数字)内。

我创建了 Entry(),然后设置了 OptionMenu(),列表的范围是从 1 到输入 e1 的数字。

程序不想启动,因为 e1 = 到 '' 并且不能输入范围。

代码:

from tkinter import *  

root = Tk()

e1 = Entry(root)

var = StringVar(root)
var.set(3)

ls = list(range(1, int(e1.get()) + 1))

o1 = OptionMenu(root, var, *ls)

root.mainloop()

对此我该怎么办?有没有办法让 OptionMenu() 不可用,直到 Entry() 中有一个 int 使用 if 和 try: + except: ValueError ?

感谢您的帮助!

最佳答案

您可以尝试创建一个按钮,当用户按下它时,它会更新 OptionMenu(),或者您可以在启动时创建一个线程来扫描 Entry > 经常字段并相应地更新列表框。线程的优点是对用户隐藏,但缺点是需要额外的计算工作。我可能会实现这两个选项之一,但我确信还有更多的可能性!

根据请求,我将详细说明如何通过上述按钮方法解决此问题

import tkinter as tk
from tkinter import ttk # for the Combobox widget


class OOP:
def __init__(self): # initialize our GUI
self.win = tk.Tk() # initialize main window
self.user_selected_option = tk.StringVar() # make a variable that can .get() what the user selects from the menu
self.user_entry = tk.IntVar()
self.user_entry.set(3) # set the initial number or options to be 1-3
possible_range = [i for i in range(1, self.user_entry.get() + 1)]
tk.Entry(self.win, textvariable=self.user_entry).pack(fill='both')
self.option_menu = ttk.Combobox(self.win, state='readonly', textvariable=self.user_selected_option, values=tuple(possible_range))
self.option_menu.pack(fill='both') # we pack it into the GUI
tk.Button(self.win, text='Update', command=self.update_option_menu).pack(fill='both') # we make a button that updates the options available

def update_option_menu(self): # we make a function to update the buttons that the button command is linked to
possible_range = [i for i in range(1, self.user_entry.get() + 1)] # we create a list of values to display (same code as above)
self.option_menu.configure(values=possible_range) # we update the values in the Combobox via its .configure() method


app = OOP() # with the class now defined we make an instance of it
app.win.mainloop() # And we spin up a GUI for that instance

我使用 OOP(面向对象编程),因为我相信它可以用更少的代码实现更多的功能,并为 future 创建更多可重用的代码。它还通过为所有 Python 类提供一个 init 方法标准来解决需要初始化的问题。希望我的评论足以解释这一点,但如果需要澄清,我会编辑它

关于python - 有没有办法在 Entry() 中存在 int 之前使 OptionMenu() 不可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54371216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com