鱼C论坛

 找回密码
 立即注册
查看: 1869|回复: 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#是直接把三个函数名放在列表里了

但是,其实我们究其本质的话,有更简单的方式,
  1. textedit_list={1:self.ui.textEdit_1, 2:self.ui.textEdit_2}
  2. textedit_list[L].setText(list1[0])
复制代码

这里我特意使用了字典,虽然用列表也是一样的(比如5#的方式),使用字典的好处是,不论L是那种类型的变量,只要它的变量类型可以作为字典的键值,那上面的代码就都可以用~



6FB4F130-DD3B-487d-81FD-CBB88EA70DB1.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

  3. def func2():
  4.     print('this is function 2')

  5. def func3():
  6.     print('this is function 3')

  7. L = int(input())

  8. exec(f"func{L}()")
复制代码
  1. 1
  2. this is function 1

  3. 2
  4. this is function 2
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

  感觉你这是把魔术方法吃透了的样子,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-31 10:33:51 | 显示全部楼层
  1. funcs = [func0, func1,func2]
  2. funcs[index].setText(args)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

但是,其实我们究其本质的话,有更简单的方式,
  1. textedit_list={1:self.ui.textEdit_1, 2:self.ui.textEdit_2}
  2. textedit_list[L].setText(list1[0])
复制代码

这里我特意使用了字典,虽然用列表也是一样的(比如5#的方式),使用字典的好处是,不论L是那种类型的变量,只要它的变量类型可以作为字典的键值,那上面的代码就都可以用~



小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-31 12:52:31 | 显示全部楼层
谢谢各位   大家的方法都我记录下来 , 都挺厉害的
小甲鱼最新课程 -> https://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() 进行判断,没有就创建个新控件对象。具体可以自己了解。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

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

其实,这道题目的最优解在 23 种设计模式中,使用策略模式就行了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

学习了~~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 16:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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