有一个选项菜单影响下一步

2024-10-04 03:15:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我想做一个小程序,将采取一个目录中的文件夹列表,并列出他们在一个选择菜单为这个我用了optionmenu,但我也看到人们使用combomenu,所以会很高兴地改变,如果它是一个更好的选择。 在项目菜单中进行选择后,我希望第二个菜单更新为所选项目菜单中的文件夹。最后一步是一样的,但我想这将是一个非常相似的过程。 还有没有打印选项菜单选择的好方法?你知道吗

谢谢!你知道吗

import os, sys
from tkinter import *
from tkinter import ttk



def findshots(*args):
    print("change")
    return 1




# -------- project selection ---------

currentprojects = './dummy/projects'
currentprojectslist = os.listdir(currentprojects)

# --------- shots list -------------------

projectselection = findshots()
currentshots = "./dummy/projects/{}/shots".format(currentprojectslist[projectselection])
currentshotslist = os.listdir(currentshots)




# ----------  script list -------------------

shotselection = 0
currentnk = "./dummy/projects/{}/shots/{}/nk".format(currentprojectslist[projectselection], currentshotslist[
    shotselection])
currentnklist = os.listdir(currentnk)


# ----------------------------------------------

# --------MAIN--------------



root = Tk()

root.geometry("1000x1000+800+100")
root.resizable(width=False, height=False)





# ------- project -----------
projectmenuvar = StringVar(root)
projectmenuvar.set(currentprojectslist[0])
projectmenuvar.trace("w", findshots)


projectmenuvar = OptionMenu(root, projectmenuvar, *currentprojectslist)
projectmenuvar.pack()





# ----------- shot -------------



shotsmenuvar = StringVar(root)
shotsmenuvar.set(currentshotslist[0])



shotsmenuvar = OptionMenu(root, shotsmenuvar, *currentshotslist)
shotsmenuvar.pack()


root.mainloop()

Tags: import文件夹os菜单rootdummyprojectslistdir
1条回答
网友
1楼 · 发布于 2024-10-04 03:15:51

因为OptionMenu类似于弹出菜单,所以只要projectmenu发生更改,就可以更新shotsmenu菜单项列表。以下是基于您的修改代码:

from tkinter import *
import os

root = Tk()

# get project list
currentprojects = './dummy/projects'
currentprojectslist = os.listdir(currentprojects)

def findshots(*args):
    project = projectmenuvar.get()
    print('project changed:', project)
    # get shot list
    currentshots = '{}/{}/shots'.format(currentprojects, project)
    currentshotslist = os.listdir(currentshots)
    print(currentshotslist)
    # update the shotsmenu
    menu = shotsmenu['menu']
    menu.delete(0, 'end') # remove existing list
    for shot in currentshotslist:
        menu.add_command(label=shot, command=lambda val=shot: shotsmenuvar.set(val))
    # select the first shot
    shotsmenuvar.set(currentshotslist[0])

def on_shot_changed(*args):
    print('shot changed:', shotsmenuvar.get())

projectmenuvar = StringVar()
projectmenuvar.trace('w', findshots)
projectmenu = OptionMenu(root, projectmenuvar, *currentprojectslist)
projectmenu.config(width=15)
projectmenu.pack()

shotsmenuvar = StringVar()
shotsmenuvar.trace('w', on_shot_changed)
shotsmenu = OptionMenu(root, shotsmenuvar, ())
shotsmenu.config(width=15)
shotsmenu.pack()

# select the first project
projectmenuvar.set(currentprojectslist[0])

root.mainloop()

相关问题 更多 >