Я использую модули enthought traitsui и traits для создания простого графического интерфейса.Всплывающее предупреждение, если каталог содержит файл перед его выбором [Python, traitsui]
Код, который я на данный момент показан ниже. Я ищу способ всплывающего предупреждения, если «базовый каталог» нового экземпляра Study_info содержит файл с именем «conf.txt» перед его выбором. Затем я создаю новый экземпляр Study, если каталог study_info.base не содержит файл «conf.txt», или если пользователь соглашается продолжить, когда появится всплывающее предупреждение.
В настоящее время я проверяю, существует ли файл в папке после нажатия кнопки «ОК» окна «Новое окно исследования». Я задавался вопросом, есть ли способ сделать всплывающее предупреждение раньше (сразу после нажатия «ОК» в окне просмотра каталогов), так что, если пользователь нажимает «Отмена», он может сразу нажать «просмотреть», снова выберите другую папку (не возвращаясь в окно «Главное окно»). Теперь пользователю нужно нажать «Новое исследование», чтобы выбрать другую папку.
from traitsui.api import *
from traits.api import *
import os
class Study_info(HasTraits):
base_directory = Directory(exists=True)
new_study_view = View('base_directory',title="New study window", buttons=['OK','Cancel'],kind='modal')
warning_msg = '\nWarning: Folder already contains configuration file.\n\nProceed ?\n'
warning = View(Item('warning_msg',show_label=False,style='readonly'),title='Warning',kind='modal',buttons = ['OK','Cancel'])
class Study(HasTraits):
def __init__(self, study_info):
self.base_directory = study_info.base_directory
# plus some other processing stuff
view = View(Item('base_directory',style='readonly'))
class study_handler(Handler):
def new_study(self, ui_info):
new_study_info = Study_info()
ns_res = new_study_info.configure_traits(view='new_study_view')
if ns_res and os.path.exists(new_study_info.base_directory):
new_study = Study(new_study_info)
if os.path.exists(os.path.join(new_study.base_directory,'conf.txt')):
warn_res = new_study_info.configure_traits(view='warning')
if warn_res:
ui_info.ui.context["object"].study = new_study
else:
ui_info.ui.context["object"].study = new_study
class GUI(HasTraits):
study = Instance(HasTraits)
new_study = Action(name="New Study",action="new_study")
view = View(Item('study',style='custom',show_label=False),buttons = [new_study], handler = study_handler(),title="Main window",resizable=True)
g = GUI()
g.configure_traits()
Любые идеи? Есть ли способ переписать все проверки того, что каталог является существующим каталогом, чтобы он также проверял, существует ли файл внутри папки? Как связать это, чтобы открыть окно предупреждения?
Большое спасибо!
Спасибо за предложение, хотя мой пост, возможно, не был достаточно ясным. Я ищу больше, как сделать всплывающее окно с предупреждением после нажатия кнопки «ОК» окна просмотра папки, поэтому, если пользователь нажимает «Отмена» в окне предупреждения, он может напрямую нажмите кнопку «Обзор» еще раз, чтобы выбрать другую папку. В настоящее время предупреждение появляется после нажатия кнопки «ОК» в «окне нового исследования», поэтому, если пользователь нажимает на отмену, ему необходимо нажать «Новое исследование» -> Обзор. Он работает, но мне интересно, можно ли избежать этого дополнительного клика. – user2261190