Python / Kivy:.kv文件中的条件设计

时间:2016-12-17 17:37:30

标签: python kivy kivy-language

在Kivy中,是否可以采用类似于以下示例的方法? 发布的代码显然不起作用,而且它只是一个例子:我需要根据某个属性绘制不同的布局。

你会如何建议解决这个问题?

{{1}}

2 个答案:

答案 0 :(得分:1)

我会使用ScreenManager或Carousel,一个简单的例子可能是:

Carousel: 
    index: 1# or a "certain property" :)
    scroll_timeout: 0.0 # disable the user ability to mess with the widgets layout 
    BoxLayout: #first option
        Label:
        Button:
    BoxLayout: #2nd option
        Button:
        Label:

如果您将索引绑定到您选择的属性,它将自动切换布局:)...

基于 ScreenManager 的方法非常相似,主要更改只是绑定 current_screen 属性而不是 index

答案 1 :(得分:1)

KV lang只有有限的功能,所以如果你想要更多的控制,你应该把你的逻辑放在Python代码中。例如,您可以将布局移动到单独的小部件中,然后使用void ls(char** array) { pid_t pid = fork(); if (pid == 0) { execv("./ls",array); } else { waitpid(pid,0,0); } } void cp(char** array) { pid_t pid = fork(); if (pid == 0) { execv("./cp",array); } else { waitpid(pid,0,0); } } void groups(char** array) { pid_t pid = fork(); if (pid == 0) { execv("./groups",array); } else { waitpid(pid,0,0); } } int input() { char buffer[128]; char * str; char * str1; char * str2; char * str3; char *name; int i = 0; int num; int words = 1; name = getlogin(); printf("%s --->", name); int result = scanf("%[^\n]",buffer); getchar(); char **array; if (result > 0) { for (int i = 0; buffer[i]!='\0'; i++) { if (buffer[i] == ' ' || buffer[i] == '\n' || buffer[i] == '\t') { words++; } } array = malloc(words * sizeof(char*)); array[0] = strtok(buffer, " "); for(int w = 1; w < words; w++) { array[w] = strtok(NULL, " "); } if (words == 1) { array[1] = '\0'; } } str = strstr(array[0], "ls"); str1 = strstr(array[0], "cp"); str2 = strstr(array[0], "groups"); str3 = strstr(array[0], "exit"); if (str != NULL) { ls(array); free(array); } else if (str1 != NULL) { cp(array); free(array); } else if (str2 != NULL) { groups(array); free(array); } else if (str3 != NULL) { num = 0; free(array); return num; } else { printf("Incorrect command\n"); } num = 1; return num; add_widget()从Python代码中动态选择适当的小部件。

remove_widget()