irx999 发表于 2021-12-30 21:12:11

大家好,我 想用 L 这个变量 去修改指定的行 ,

如图所示,假如我L = 1 我就触发textedit_1,L = 2 我就触发textedit_2 怎么样像字符串一样    f”{}“ 快速方便的修改呢 , 谢谢各位

傻眼貓咪 发表于 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

z5560636 发表于 2021-12-31 10:09:04

傻眼貓咪 发表于 2021-12-30 22:00


{:10_253:}感觉你这是把魔术方法吃透了的样子,

傻眼貓咪 发表于 2021-12-31 10:11:58

z5560636 发表于 2021-12-31 10:09
感觉你这是把魔术方法吃透了的样子,

{:10_254:}

Stubborn 发表于 2021-12-31 10:33:51

funcs =
funcs.setText(args)

lightninng 发表于 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.setText(list1)
这里我特意使用了字典,虽然用列表也是一样的(比如5#的方式),使用字典的好处是,不论L是那种类型的变量,只要它的变量类型可以作为字典的键值,那上面的代码就都可以用~



irx999 发表于 2021-12-31 12:52:31

谢谢各位   大家的方法都我记录下来 , 都挺厉害的{:10_275:}

阿奇_o 发表于 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)
若不知道有多少个,则可以先用 hasattr() 进行判断,没有就创建个新控件对象。具体可以自己了解。

z5560636 发表于 2021-12-31 18:50:17

阿奇_o 发表于 2021-12-31 14:31
不太赞同你这种做法,因为这样"不优雅",不符合Python的理念。

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

其实,这道题目的最优解在 23 种设计模式中,使用策略模式就行了。

lightninng 发表于 2022-1-9 20:06:12

阿奇_o 发表于 2021-12-31 14:31
不太赞同你这种做法,因为这样"不优雅",不符合Python的理念。

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

学习了~~
页: [1]
查看完整版本: 大家好,我 想用 L 这个变量 去修改指定的行 ,