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

CTkEntry控件DISABLED状态占位符消失,切换NORMAL仍不显示求助

问题1:获取EXE文件的标题、公司、商标等版本信息

你当前的choose_clone_file函数仅提取了FileDescription,且错误地使用title.configure(text=name)(CTkEntry的内容由textvariable控制)。可以通过pefile遍历EXE的版本资源StringTable,提取所有需要的字段并赋值给对应的StringVar:

修改后的choose_clone_file函数:

def choose_clone_file():
    file = filedialog.askopenfilename(title="Select Clone File", filetypes=[("Assembly Files", "*.exe")])
    details = pefile.PE(file)
    string_table = None
    # 遍历找到包含字符串表的FileInfo项
    for info in details.FileInfo:
        if hasattr(info, 'StringTable'):
            string_table = info.StringTable
            break
    if not string_table:
        return
    # 提取各版本字段并赋值给对应变量
    title_var.set(string_table.entries.get('FileDescription', ''))
    product_var.set(string_table.entries.get('ProductName', ''))
    description_var.set(string_table.entries.get('InternalName', ''))  # 可根据需求替换为其他字段
    copyright_var.set(string_table.entries.get('LegalCopyright', ''))
    company_var.set(string_table.entries.get('CompanyName', ''))
    trademark_var.set(string_table.entries.get('LegalTrademarks', ''))
    version_var.set(string_table.entries.get('FileVersion', ''))

注意:版本资源的字段名需和PE文件中实际存在的对应,常见字段包括FileDescription、ProductName、CompanyName、LegalTrademarks、LegalCopyright、FileVersion等。


问题2:CTkEntry DISABLED状态占位符不显示,切换NORMAL后仍失效

这是CustomTkinter的默认行为:DISABLED状态下CTkEntry会隐藏占位符,且切换回NORMAL状态时不会自动重新渲染占位符。解决方法是在切换到NORMAL状态时,手动重新设置一次占位符文本,触发控件更新:

修改后的check函数:

def check():
    if check_var.get() == 'on':
        check_box.configure(text='Enabled')
        # 绑定控件与对应占位符文本
        entry_configs = [
            (title, 'Title...'),
            (product, 'Product'),
            (description, 'description'),
            (copyright, 'Copyright'),
            (company, 'Company'),
            (trademark, 'TreadeMark'),
            (version, '0.0.0.0')
        ]
        for entry, placeholder in entry_configs:
            entry.configure(state=NORMAL)
            entry.configure(placeholder_text=placeholder)  # 重新设置占位符触发显示
        clone_file.configure(state=NORMAL)
        randomize.configure(state=NORMAL)
    else:
        check_box.configure(text='Disabled')
        for entry in [title, product, description, copyright, company, trademark, version]:
            entry.configure(state=DISABLED)
        clone_file.configure(state=DISABLED)
        randomize.configure(state=DISABLED)

这样切换到Enabled状态时,所有输入框的占位符会重新显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 23:27:01