You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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时设置禁用状态,插入内容时临时开启权限即可:

  1. 修改ScrolledText的创建代码:
scr = scrolledtext.ScrolledText(root, bg="grey", height=10, state='disabled') 
  1. 在ButClick函数中插入内容前后切换状态:
# 插入前开启编辑权限
scr.config(state='normal')
scr.insert(INSERT, result + "\n")
# 插入后立即禁用编辑
scr.config(state='disabled')

另外注意原代码重复创建了两次root = Tk(),会导致弹出两个独立窗口,建议删除第一个root相关的代码块,只保留一个主窗口实例。

内容的提问来源于stack exchange,提问作者Poremich

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 18:24:29