作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在创建新文件夹时验证用户在 gtk.FileChooser 对话框中选择的文件夹名称。
我尝试连接到对话的“响应”信号,但已经太晚了,新文件夹将被写入光盘。
除了在将文件夹写入光盘后对其进行验证之外,还有其他方法可以实现此目的吗?
感谢 Mark...这是我正在使用的代码:
import gtk
def _newFolderDialog(currentFolder=None):
newDialog = gtk.FileChooserDialog(
title="Create new folder", parent=None,
action=gtk.FILE_CHOOSER_ACTION_CREATE_FOLDER,
buttons= (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL), backend=None)
newButton = newDialog.add_button(gtk.STOCK_NEW, gtk.RESPONSE_OK)
if currentFolder is not None:
newDialog.set_current_folder(currentFolder)
newButton.connect("pressed", validateChoice, newDialog)
response = newDialog.run()
if response == gtk.RESPONSE_OK:
newFolder = newDialog.get_filename()
newDialog.destroy()
return newFolder
elif response == 1: # Validation was not satisfied
msg = gtk.MessageDialog(parent=None, flags=gtk.DIALOG_MODAL,
type=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK,
message_format="Try again!")
msg.run()
msg.destroy()
current_folder = newDialog.get_current_folder()
newDialog.destroy()
return _newFolderDialog(current_folder)
elif response == 2: # Ok button was pressed, but with no entry
current_folder = newDialog.get_current_folder()
newDialog.destroy()
return _newFolderDialog(current_folder)
elif response == gtk.RESPONSE_CANCEL:
newDialog.destroy()
return None
def validateChoice(button, dialog):
newFolder = dialog.get_filename()
if newFolder is None: # The cursor was in the empty text entry box
dialog.response(2)
else:
# If cursor is selecting a folder, lets unselect it, we are intereste
# in the value in the entry text box.
dialog.unselect_filename(newFolder)
newFolder = dialog.get_filename()
if newFolder is None: # A folder was selected but empty text entry box
dialog.response(2)
## do some validation, in this case the folder has to start with "/home"
elif not newFolder.startswith("/home"):
dialog.response(1)
else:
dialog.response(gtk.RESPONSE_OK)
newFolder = _newFolderDialog()
print newFolder
最佳答案
我可以看到有几种方法可以做到这一点。
第一,只需编写您自己的响应 ID 处理程序,而不是使用 gtk.RESPONSE_OK(对于小部件而言,这意味着创建文件夹)。如果您这样做,您将负责在验证后实际创建文件夹 (os.path.mkdir)。
第二,您可以覆盖对“新建”按钮的点击:
import gtk
def new_button_pressed(widget, data=None):
## data is a reference to the dialog widget
## do some validation, in this case the folder has to start with "/home"
if not(data.get_filename().startswith("/home")):
## force cancel response
print "failed validation..."
data.response(gtk.RESPONSE_CANCEL)
else:
print "success validation..."
data.response(gtk.RESPONSE_OK)
newDialog = gtk.FileChooserDialog(
title="Create new folder", parent=None,
action=gtk.FILE_CHOOSER_ACTION_CREATE_FOLDER,
buttons= (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL), backend=None)
new_button = newDialog.add_button(gtk.STOCK_NEW, gtk.RESPONSE_OK)
new_button.connect("pressed", new_button_pressed, newDialog)
newDialog.run()
关于python - pyGTK/GTK filechooser - 是否可以在文件或文件夹写入光盘之前验证用户输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4515916/
我想用 list-style-type: disc; 列出一些程序。 但是列表项没有这个“disc”并且有滚动条,我不知道为什么......看这里(Link)。 它应该只是一个带有光盘图标的列表,每个
使用 cygwin 终端,我的 .bashrc 中有以下内容: export WINHOME="/cygdrive/c/Users/userName" export TUTORING="$WINHOM
我创建了一个别名,以免每次我移动到一个新目录时都写 ls: alias cl='cd_(){ cd "$@" && ls; }; cd_' 假设我有一个名为“下载”的文件夹(我当然碰巧有),所以我只需
我是一名优秀的程序员,十分优秀!