Python Tkinter随机数生成器问题:相邻去重与输入框禁用
Tkinter伪随机数生成器问题解决方案
问题1:生成无相邻重复的随机数
要避免相邻随机数重复,核心是记录上一次生成的数值,确保新生成的数和上一个不同。修改ButClick函数的随机数生成逻辑:
def ButClick(): try: MinNum = int(txt1.get()) MaxNum = int(txt2.get()) Num = int(txt3.get()) except ValueError: messagebox.showerror("ValueError", "Check if you typed in correct! You can't type in text! Numbers only!") else: if MinNum > MaxNum: messagebox.showerror("NumError!", "Your Min Number can't be higher than your Max Number or vice versa!") return # 处理最小值等于最大值的情况,此时无法避免重复 if MinNum == MaxNum: result = " " + str(MinNum) * Num # 临时开启编辑权限插入内容 scr.config(state='normal') scr.insert(INSERT, result + "\n") scr.config(state='disabled') return result = '' last_num = None count = 0 while count < Num: current_num = randint(MinNum, MaxNum) # 第一个数直接用,后续必须和上一个不同 if last_num is None or current_num != last_num: result += f" {current_num}" last_num = current_num count += 1 scr.config(state='normal') scr.insert(INSERT, result + "\n") scr.config(state='disabled')
核心修改:
- 新增
last_num变量追踪上一次生成的随机数 - 每次生成新数时判断是否和上一个重复,重复则重新生成,直到得到不同的数
- 单独处理Min和Max相同的边界场景
问题2:禁用ScrolledText手动编辑功能
直接在创建ScrolledText时设置禁用状态,插入内容时临时开启权限即可:
- 修改ScrolledText的创建代码:
scr = scrolledtext.ScrolledText(root, bg="grey", height=10, state='disabled')
- 在
ButClick函数中插入内容前后切换状态:
# 插入前开启编辑权限 scr.config(state='normal') scr.insert(INSERT, result + "\n") # 插入后立即禁用编辑 scr.config(state='disabled')
另外注意原代码重复创建了两次root = Tk(),会导致弹出两个独立窗口,建议删除第一个root相关的代码块,只保留一个主窗口实例。
内容的提问来源于stack exchange,提问作者Poremich
相关产品推荐
相关产品推荐

