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
相关产品推荐
相关产品推荐

