在此之前我写了一个gui,用户输入很多单词在文本框里,这些单词是自动用括号隔开的,我们已经获取到了文本框里的单词
我的目的是在一串获取到的,并且由逗号隔开的多个单词,可以在指定单词的两边加上括号,并且能无限加。
我的思路是字符转列表,在进行修改列表内容,最后在添加进文本框。按照我的思路,改如何进行修改?
代码如下:
import ttkbootstrap as ttk
from ttkbootstrap.constants import *
l = '('#设置符号变量
r = ')'
root=ttk.Window(
title='''填词测试''',
themename='solar', # 设置主题
size=(600, 600), # 窗口的大小
position=(300, 100), # 窗口位置
resizable=(False, False), # 让窗口不可更改大小
alpha=0.91, # 窗口透明度
#iconphoto=r'res\at.ico'
)
str = 'hello,world,hello world,python'
showtag_text1 = ttk.Text(root, height=4, cursor='heart')
showtag_text1.place(x=0, y=0, width=500)
showtag_text1.insert('insert',str)
def add_hello():
try:
get_str = showtag_text1.get('1.0', END) # 这个字符串是用户输入的,我们获取到输入的值,这个值都是用逗号隔开的
str_to_list = get_str.split(',') # 先转换字符串为列表
index_hjfj = str_to_list.index('hello') # 获取指定元素索引
str_to_list[index_hjfj] = l + 'hello' + r # 修改指定索引的内容,也就是添加括号
text_over = ','.join(str_to_list) # 删改完成列表后重新加入为字符串
text_over.strip() # 删除末尾多余空格
showtag_text1.delete('1.0', END) # 重新清理文本框内容
showtag_text1.insert('insert', text_over) # 最后向文本框插入内容
except:
print('我已经成功添加括号到指定单词上,但是只能添加一次,这样列表就改变了,但是导致第二次无法添加,请问如何改善代码?')
ttk.Button(root,text='加括号',command=add_hello).place(x=10,y=90)
root.mainloop()
直接replace不就好了吗
该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
您的思路是正确的,将字符串先转换为列表,然后通过索引修改列表元素,再将列表转换为字符串插入到文本框中。
关于您提到的问题,是因为您使用了 index
函数获取指定元素的索引,但是这个函数只能返回第一个匹配元素的索引,因此如果您已经添加了括号,再次使用 index
函数获取的索引就会变成添加括号后的索引,导致无法再次添加括号。解决这个问题的方法是可以使用循环遍历列表,找到所有匹配元素的索引进行修改。
下面是修改后的代码示例:
import ttkbootstrap as ttk
from ttkbootstrap.constants import *
l = '(' # 设置符号变量
r = ')'
root = ttk.Window(
title='''填词测试''',
themename='solar', # 设置主题
size=(600, 600), # 窗口的大小
position=(300, 100), # 窗口位置
resizable=(False, False), # 让窗口不可更改大小
alpha=0.91, # 窗口透明度
#iconphoto=r'res\at.ico'
)
str = 'hello,world,hello world,python'
showtag_text1 = ttk.Text(root, height=4, cursor='heart')
showtag_text1.place(x=0, y=0, width=500)
showtag_text1.insert('insert', str)
def add_hello():
try:
get_str = showtag_text1.get('1.0', END) # 这个字符串是用户输入的,我们获取到输入的值,这个值都是用逗号隔开的
str_to_list = get_str.split(',') # 先转换字符串为列表
indices = [i for i, x in enumerate(str_to_list) if x.strip() == 'hello'] # 找到所有匹配元素的索引
for i in indices:
str_to_list[i] = l + str_to_list[i].strip() + r # 修改指定索引的内容,也就是添加括号
text_over = ','.join(str_to_list) # 删改完成列表后重新加入为字符串
text_over.strip() # 删除末尾多余空格
showtag_text1.delete('1.0', END) # 重新清理文本框内容
showtag_text1.insert('insert', text_over) # 最后向文本框插入内容
except:
print('添加括号失败')
ttk.Button(root, text='加括号', command=add_hello).place(x=10, y=90)
root.mainloop()
在上述代码中,我们使用列表推导式和 enumerate
函数找到所有匹配元素的索引,然后使用循环遍历这些索引,修改指定索引的内容。修改后的内容还是使用 join
函数将列表转换为字符串,最后插入到文本框中。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢
不知道你这个问题是否已经解决, 如果还没有解决的话:代码示例
# -*- coding:utf-8 -*-
# @Time : 2022-05-30
# @Author : carl_DJ
import PySimpleGUI as psg
"选择弹窗"
# 显示弹窗以及是和否按钮, 选择判断
answer = psg.popup_yes_no("Do you like 王心凌?")
psg.popup("You have selected", answer)
运行结果