def toggle_tabs_event(self, event):
if self.askyesno(
"Toggle tabs",
"Turn tabs " + ("on", "off")[self.usetabs] +
"?\nIndent width " +
("will be", "remains at")[self.usetabs] + " 8." +
"\n Note: a tab is always 8 columns",
parent=self.text):
self.usetabs = not self.usetabs
# Try to prevent inconsistent indentation.
# User must change indent width manually after using tabs.
self.indentwidth = 8
return "break"
# XXX this isn't bound to anything -- see tabwidth comments
## def change_tabwidth_event(self, event):
## new = self._asktabwidth()
## if new != self.tabwidth:
## self.tabwidth = new
## self.set_indentation_params(0, guess=0)
## return "break"
python类askyesno()的实例源码
def next_match(self, event=None):
try:
current_target, current_target_end = self.match_coordinates[self.current_match]
self.main_text.tag_remove("sel", current_target, current_target_end)
self.main_text.tag_add("findmatch", current_target, current_target_end)
except IndexError:
pass
try:
self.current_match = self.current_match + 1
next_target, target_end = self.match_coordinates[self.current_match]
except IndexError:
if len(self.match_coordinates) == 0:
msg.showinfo("No Matches", "No Matches Found")
else:
if msg.askyesno("Wrap Search?", "Reached end of file. Continue from the top?"):
self.current_match = -1
self.next_match()
else:
self.main_text.mark_set(tk.INSERT, next_target)
self.main_text.tag_remove("findmatch", next_target, target_end)
self.main_text.tag_add("sel", next_target, target_end)
self.main_text.see(next_target)
def next_match(self, event=None):
try:
current_target, current_target_end = self.match_coordinates[self.current_match]
self.main_text.tag_remove("sel", current_target, current_target_end)
self.main_text.tag_add("findmatch", current_target, current_target_end)
except IndexError:
pass
try:
self.current_match = self.current_match + 1
next_target, target_end = self.match_coordinates[self.current_match]
except IndexError:
if len(self.match_coordinates) == 0:
msg.showinfo("No Matches", "No Matches Found")
else:
if msg.askyesno("Wrap Search?", "Reached end of file. Continue from the top?"):
self.current_match = -1
self.next_match()
else:
self.main_text.mark_set(tk.INSERT, next_target)
self.main_text.tag_remove("findmatch", next_target, target_end)
self.main_text.tag_add("sel", next_target, target_end)
self.main_text.see(next_target)
def saveConfig(self, config_type):
print("Saving config: {}".format(config_type))
if config_type == "config":
filepath = "config"
config_dict = self.app_config
ordered = ['theme_folder', 'theme_title', 'theme_desc', 'theme_author', 'theme_version', 'meta_icon', 'screen_gap', 'anim_duration', 'overwrite', 'language']
elif config_type == "textcolor":
theme_folder = self.app_config['theme_folder']
os.makedirs(theme_folder, exist_ok=True)
filepath = os.path.join(theme_folder,'textcolor.cfg')
config_dict={}
for key in self.text_config:
value = "{}{}".format(self.text_config[key]['alpha'], swapRGBBGR(self.text_config[key]['rgb'])[1:])
config_dict.update({key: value})
ordered = ['text', 'nand', 'sd', 'gamecard', 'dstitle', 'file', 'directory', 'enabled', 'disabled', 'installed', 'notinstalled', 'ticketinuse', 'ticketnotinuse']
if os.path.isfile(filepath) and not self.app_config['overwrite'] in ['always', 'textcolor']:
if not messagebox.askyesno("Warning", "A textcolor.cfg already exists, do you want to overwrite?", icon='warning'):
return
with open(filepath, 'w') as f:
for key in ordered:
f.write("{}={}\n".format(key, config_dict[key]))
f.truncate(f.tell() - len(os.linesep))
def savePreview(self):
print("Generating preview image...")
x1 = self.winfo_rootx()+self.canvas.winfo_x()
y1 = self.winfo_rooty()+self.canvas.winfo_y()
x2 = x1+self.canvas.winfo_width()
y2 = y1+self.canvas.winfo_height()
coords = [x1, y1, x2, y2]
if os.path.isfile("preview.png") and not self.app_config['overwrite'] in ['always', 'preview']:
if not messagebox.askyesno("Warning", "Preview image already exists, do you want to overwrite?", icon='warning'):
return
self.attributes("-topmost", 1)
self.attributes("-topmost", 0)
self.canvas.delete('toolbar')
self.canvas.update_idletasks()
ImageGrab.grab().crop((x1,y1,x2,y2)).save("preview.png")
self.updateCanvas()
def saveConfig(self, config_type):
print("Saving config: {}".format(config_type))
if config_type == "config":
filepath = "config"
config_dict = self.app_config
ordered = ['theme_folder', 'theme_title', 'theme_desc', 'theme_author', 'theme_version', 'meta_icon', 'screen_gap', 'anim_duration', 'overwrite', 'language']
elif config_type == "textcolor":
theme_folder = self.app_config['theme_folder']
os.makedirs(theme_folder, exist_ok=True)
filepath = os.path.join(theme_folder,'textcolor.cfg')
config_dict={}
for key in self.text_config:
r,g,b,a = self.text_config[key]
value = "{:02x}{:02x}{:02x}{:02x}".format(a,b,g,r).upper()
config_dict.update({key: value})
ordered = ['text', 'nand', 'sd', 'gamecard', 'dstitle', 'file', 'directory', 'enabled', 'disabled', 'installed', 'notinstalled', 'ticketinuse', 'ticketnotinuse']
if os.path.isfile(filepath) and not self.app_config['overwrite'] in ['always', 'textcolor']:
if not messagebox.askyesno("Warning", "A textcolor.cfg already exists, do you want to overwrite?", icon='warning'):
return
with open(filepath, 'w') as f:
for key in ordered:
f.write("{}={}\n".format(key, config_dict[key]))
f.truncate(f.tell() - len(os.linesep))
def savePreview(self):
print("Generating preview image...")
x1 = self.winfo_rootx()+self.canvas.winfo_x()
y1 = self.winfo_rooty()+self.canvas.winfo_y()
x2 = x1+self.canvas.winfo_width()
y2 = y1+self.canvas.winfo_height()
coords = [x1, y1, x2, y2]
if os.path.isfile("preview.png") and not self.app_config['overwrite'] in ['always', 'preview']:
if not messagebox.askyesno("Warning", "Preview image already exists, do you want to overwrite?", icon='warning'):
return
self.attributes("-topmost", 1)
self.attributes("-topmost", 0)
self.canvas.delete('toolbar')
self.canvas.update_idletasks()
ImageGrab.grab().crop((x1,y1,x2,y2)).save("preview.png")
#self.v['canvas_image'].save("preview.png")
self.updateCanvas()
def DeleteItem(): # ??? ??? ??
rawSelectedItems = tree.selection()
pageIndexList = tree.get_children()
[tree.selection_add(tree.get_children(r)) for r in rawSelectedItems if r in pageIndexList]
[tree.selection_add(tree.parent(r)) for r in rawSelectedItems if r not in pageIndexList and tree.next(r) == '' and tree.prev(r) == '']
selectedItems = tree.selection()
numberOfSelection = len(selectedItems)
if numberOfSelection == 0:
return 0
displayMessage = '? ' + str(len(selectedItems)) + ' ? ??? ?????????'
if messagebox.askyesno('?? ??', displayMessage):
for s in selectedItems:
if not tree.exists(s):
continue
elif tree.parent(s) == '':
tree.delete(s)
elif tree.parent(s) in selectedItems:
continue
else:
itspage = tree.parent(s)
origVal = tree.set(itspage)
tree.item(itspage, value=[origVal['#1'], origVal['#2'], int(origVal['#3'])-1, origVal['#4']])
tree.delete(s)
root.lift()
def main():
# ?????????,?????Tkinter????????Tk??.??????withdraw()??????
tk = tkinter.Tk()
tk.withdraw() # ?????
print(dir(mb))
# ??,?????????,??ok,????????????.??????????????,??????????.
# ??,???Cancel?,??????None
mb.showinfo("Title", "Your message here")
mb.showerror("An Error", "Oops!")
mb.showwarning("Title", "This may not work...")
mb.askyesno("Title", "Do you love me?")
mb.askokcancel("Title", "Are you well?")
mb.askquestion("Title", "How are you?")
mb.askretrycancel("Title", "Go again?")
mb.askyesnocancel("Title", "Are you well?")
def toggle_tabs_event(self, event):
if self.askyesno(
"Toggle tabs",
"Turn tabs " + ("on", "off")[self.usetabs] +
"?\nIndent width " +
("will be", "remains at")[self.usetabs] + " 8." +
"\n Note: a tab is always 8 columns",
parent=self.text):
self.usetabs = not self.usetabs
# Try to prevent inconsistent indentation.
# User must change indent width manually after using tabs.
self.indentwidth = 8
return "break"
# XXX this isn't bound to anything -- see tabwidth comments
## def change_tabwidth_event(self, event):
## new = self._asktabwidth()
## if new != self.tabwidth:
## self.tabwidth = new
## self.set_indentation_params(0, guess=0)
## return "break"
def _do_reset():
if not _needs_reset:
messagebox.showinfo("Reset Settings",
"You are already using the default settings.")
return
if not messagebox.askyesno(
"Reset Settings", "Are you sure you want to reset all settings?",
parent=_dialog):
return
for section in _sections.values():
for key, info in section._infos.items():
if info.reset:
section[key] = info.default
messagebox.showinfo(
"Reset Settings", "All settings were reset to defaults.",
parent=_dialog)
def toggle_tabs_event(self, event):
if self.askyesno(
"Toggle tabs",
"Turn tabs " + ("on", "off")[self.usetabs] +
"?\nIndent width " +
("will be", "remains at")[self.usetabs] + " 8." +
"\n Note: a tab is always 8 columns",
parent=self.text):
self.usetabs = not self.usetabs
# Try to prevent inconsistent indentation.
# User must change indent width manually after using tabs.
self.indentwidth = 8
return "break"
# XXX this isn't bound to anything -- see tabwidth comments
## def change_tabwidth_event(self, event):
## new = self._asktabwidth()
## if new != self.tabwidth:
## self.tabwidth = new
## self.set_indentation_params(0, guess=0)
## return "break"
def yesNoBox(self, title, message):
self.topLevel.update_idletasks()
return MessageBox.askyesno(title, message)
def __init__(self, response=str, text="", title=None, accept=0, **options):
if response is bool:
self.dialog = [askyesno, askokcancel, askretrycancel][accept]
else: self.dialog = {None:showinfo, str:askstring, int:askinteger, float:askfloat,
0:askopenfilename, 1:asksaveasfilename, 2:askdirectory}[response]
self.options = options.copy()
if "initialdir" in options:
self.options["initialdir"] = abspath(options["initialdir"])
if type(response) is int:
self.args = tuple()
if title: self.options["title"] = title
else:
if title is None:
title = "Info" if response is None else "Confirm" if response is bool else "Input"
self.args = title, text
def cancel(self, event=None, force=False):
title = 'Warning'
message = 'Are you sure you want\nto stop taking this test?'
if force or messagebox.askyesno(title, message, master=self):
if self.parent is not None:
self.parent.focus_set()
self.destroy()
################################################################################
def yesNoBox(self, title, message):
self.topLevel.update_idletasks()
return MessageBox.askyesno(title, message)
def isHuman(self, number):
'''
Function to choose wether the player is human or not.
'''
msg = 'Is Player {} a human?'.format(number)
return messagebox.askyesno('Human or PC', msg)
#|22th.|
def playAgain(self, number):
msg = 'Player {} is the winner! \nDo you want to play again?'.format(number)
return messagebox.askyesno('Play again', msg)
#|20th.|
def quitter(self, event=None):
"""
Fonction appelé pour finir le programme, une confirmation est demandée avant
"""
reponse = askyesno("Quitter le programme ?",
"Voulez-vous réellement terminer ? \n cliquer <<oui>> pour finir")
if reponse:
self.fenetre.destroy()
def load_file(self):
base = iface.JSONInterface.OBJECTSPATH
# filename = 'monster/' + h.clean(self.filequery.get().casefold()) + '.monster'
filename = self.filename
# if (os.path.isfile(base + filename)):
if (os.path.isfile(filename)):
interface = iface.JSONInterface(filename, isabsolute=True)
self.data.update(interface.get('/'))
# self.data.update({'average': self.av.get()})
av = messagebox.askyesno(message='Take average HP?')
self.data.update({'average': av})
self.finish(fromfile=True)
else:
gui.ErrorMessage('That file does not exist. Check your spelling.')
def ask_yes_no(self, title, message):
return messagebox.askyesno(title, message)
def ask_yes_no(self, title, message):
return messagebox.askyesno(title, message)
def start(self) -> None:
rs = self.rolling_shutter = RollingShutter(self.files,
self.tk_speed_val.get(),
self.file_output)
lines_covered = rs.frame_count * self.tk_speed_val.get()
if lines_covered < rs.height:
m = ('The number of iterations ({}) is lower than the height'
' of the resulting image ({}px).\n\nMissing spots ({} lines)'
' will be filled with black.\n\n'
'Do you want to continue?')
message = m.format(lines_covered,
rs.height,
rs.height-lines_covered)
choice = askyesno('Proceed?', message)
if not choice:
return None
self.disable_buttons()
self.progress_bar.config(maximum=lines_covered)
self.progress_bar.state(['!disabled'])
t1 = Thread(target=rs.thread, args=(self,))
t1.setDaemon(True)
t1.start()
def DeleteCustomKeys(self):
keySetName=self.customKeys.get()
if not tkMessageBox.askyesno('Delete Key Set','Are you sure you wish '+
'to delete the key set %r ?' % (keySetName),
parent=self):
return
#remove key set from config
idleConf.userCfg['keys'].remove_section(keySetName)
if keySetName in self.changedItems['keys']:
del(self.changedItems['keys'][keySetName])
#write changes
idleConf.userCfg['keys'].Save()
#reload user key set list
itemList=idleConf.GetSectionList('user','keys')
itemList.sort()
if not itemList:
self.radioKeysCustom.config(state=DISABLED)
self.optMenuKeysCustom.SetMenu(itemList,'- no custom keys -')
else:
self.optMenuKeysCustom.SetMenu(itemList,itemList[0])
#revert to default key set
self.keysAreBuiltin.set(idleConf.defaultCfg['main'].Get('Keys','default'))
self.builtinKeys.set(idleConf.defaultCfg['main'].Get('Keys','name'))
#user can't back out of these changes, they must be applied now
self.Apply()
self.SetKeysType()
def DeleteCustomTheme(self):
themeName=self.customTheme.get()
if not tkMessageBox.askyesno('Delete Theme','Are you sure you wish '+
'to delete the theme %r ?' % (themeName,),
parent=self):
return
#remove theme from config
idleConf.userCfg['highlight'].remove_section(themeName)
if themeName in self.changedItems['highlight']:
del(self.changedItems['highlight'][themeName])
#write changes
idleConf.userCfg['highlight'].Save()
#reload user theme list
itemList=idleConf.GetSectionList('user','highlight')
itemList.sort()
if not itemList:
self.radioThemeCustom.config(state=DISABLED)
self.optMenuThemeCustom.SetMenu(itemList,'- no custom themes -')
else:
self.optMenuThemeCustom.SetMenu(itemList,itemList[0])
#revert to default theme
self.themeIsBuiltin.set(idleConf.defaultCfg['main'].Get('Theme','default'))
self.builtinTheme.set(idleConf.defaultCfg['main'].Get('Theme','name'))
#user can't back out of these changes, they must be applied now
self.Apply()
self.SetThemeType()
def close_window(self):
yes = tkmessage.askyesno("Exit", "Do you really want to quit?")
if yes:
self.close()
def remove_task(self, event):
task = event.widget
if msg.askyesno("Really Delete?", "Delete " + task.cget("text") + "?"):
self.tasks.remove(event.widget)
event.widget.destroy()
self.recolour_tasks()
def remove_task(self, event):
task = event.widget
if msg.askyesno("Really Delete?", "Delete " + task.cget("text") + "?"):
self.tasks.remove(event.widget)
delete_task_query = "DELETE FROM tasks WHERE task=?"
delete_task_data = (task.cget("text"),)
self.runQuery(delete_task_query, delete_task_data)
event.widget.destroy()
self.recolour_tasks()
def confirm_delete(self, event=None):
current_tab = self.notebook.tab(self.notebook.select(), "text")
tree = self.tab_trees[current_tab]
selected_item_id = tree.selection()
selected_item = tree.item(selected_item_id)
if msg.askyesno("Delete Item?", "Delete " + selected_item["values"][0] + "?", parent=self):
task_name = selected_item["values"][0]
task_time = selected_item["values"][2]
task_date = " ".join([current_tab, task_time])
self.master.delete_task(task_name, task_date)
tree.delete(selected_item_id)
def _show_confirm_window(self, message, title):
logger.debug('Window feedback: "{}"'.format(message))
yes_pressed = messagebox.askyesno(
message=message,
title=title,
icon='question',
default='yes',
parent=self.root,
)
# TODO(amin): Bind KP_Enter in all dialogs
return yes_pressed