鱼C论坛

 找回密码
 立即注册
查看: 1665|回复: 9

[已解决]大家好,我 想用 L 这个变量 去修改指定的行 ,

[复制链接]
发表于 2021-12-30 21:12:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
如图所示,假如我L = 1 我就触发textedit_1,L = 2 我就触发textedit_2 怎么样像字符串一样    f”{}“ 快速方便的修改呢 , 谢谢各位
最佳答案
2021-12-31 12:18:54
本帖最后由 lightninng 于 2021-12-31 12:20 编辑

上面的各位提供了各种方法,其实,这个问题的本质就是怎么样通过L变量的值取到对应的控件的问题。
你可以像2#和5#一样定义好三个函数,每个函数操作不同的控件,
然后再通过某种方式取到这三个函数,这里2#用的是exec方法,5#是直接把三个函数名放在列表里了

但是,其实我们究其本质的话,有更简单的方式,
textedit_list={1:self.ui.textEdit_1, 2:self.ui.textEdit_2}
textedit_list[L].setText(list1[0])
这里我特意使用了字典,虽然用列表也是一样的(比如5#的方式),使用字典的好处是,不论L是那种类型的变量,只要它的变量类型可以作为字典的键值,那上面的代码就都可以用~



6FB4F130-DD3B-487d-81FD-CBB88EA70DB1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-30 22:00:23 | 显示全部楼层
def func1():
    print('this is function 1')

def func2():
    print('this is function 2')

def func3():
    print('this is function 3')

L = int(input())

exec(f"func{L}()")
1
this is function 1

2
this is function 2
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-31 10:09:04 | 显示全部楼层

  感觉你这是把魔术方法吃透了的样子,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-31 10:11:58 From FishC Mobile | 显示全部楼层
z5560636 发表于 2021-12-31 10:09
感觉你这是把魔术方法吃透了的样子,

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-31 10:33:51 | 显示全部楼层
funcs = [func0, func1,func2]
funcs[index].setText(args)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-31 12:18:54 | 显示全部楼层    本楼为最佳答案   
本帖最后由 lightninng 于 2021-12-31 12:20 编辑

上面的各位提供了各种方法,其实,这个问题的本质就是怎么样通过L变量的值取到对应的控件的问题。
你可以像2#和5#一样定义好三个函数,每个函数操作不同的控件,
然后再通过某种方式取到这三个函数,这里2#用的是exec方法,5#是直接把三个函数名放在列表里了

但是,其实我们究其本质的话,有更简单的方式,
textedit_list={1:self.ui.textEdit_1, 2:self.ui.textEdit_2}
textedit_list[L].setText(list1[0])
这里我特意使用了字典,虽然用列表也是一样的(比如5#的方式),使用字典的好处是,不论L是那种类型的变量,只要它的变量类型可以作为字典的键值,那上面的代码就都可以用~



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-31 12:52:31 | 显示全部楼层
谢谢各位   大家的方法都我记录下来 , 都挺厉害的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-31 14:31:05 | 显示全部楼层
lightninng 发表于 2021-12-31 12:18
上面的各位提供了各种方法,其实,这个问题的本质就是怎么样通过L变量的值取到对应的控件的问题。
你可以 ...


不太赞同你这种做法,因为这样"不优雅",不符合Python的理念。

你看,假设 我有很多个textEdit_x 控件,如十几二十个,这样手动构建字典太那个"不优雅"了,哈哈。
另外,假设 我不知道它会有多少个控件 呢?而是根据需要不断增加,数量可能是1~N个,这种情况咋办?

其实,对于已知有若干个控件对象的情况,用getattr()是个好选择。比如 getattr(self.ui, f"textEdit_{L}").setText(list1[0])
若不知道有多少个,则可以先用 hasattr() 进行判断,没有就创建个新控件对象。具体可以自己了解。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-12-31 18:50:17 | 显示全部楼层
阿奇_o 发表于 2021-12-31 14:31
不太赞同你这种做法,因为这样"不优雅",不符合Python的理念。

你看,假设 我有很多个textEdit_x 控 ...

其实,这道题目的最优解在 23 种设计模式中,使用策略模式就行了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-9 20:06:12 | 显示全部楼层
阿奇_o 发表于 2021-12-31 14:31
不太赞同你这种做法,因为这样"不优雅",不符合Python的理念。

你看,假设 我有很多个textEdit_x 控 ...

学习了~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 13:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表