def unibutton(self, params):
self.unibuttons.append([])
if len(params) == 6:
function = params[5]
else:
function = nofunction
if self.kivy:
from kivy.uix.button import Button
self.unibuttons[len(self.unibuttons) - 1] = Button(
text = params[4],
size_hint_y = None,
size_hint_x = None,
height = params[3] * self.yratio,
width = params[2] * self.xratio,
font_size = 17.5 * self.yratio,
pos = (params[0] * self.xratio, params[1] * self.yratio),
on_press = function )
self.root.add_widget(self.unibuttons[len(self.unibuttons) - 1])
else:
import ui
self.unibuttons[len(self.unibuttons) - 1] = ui.Button(frame= \
(params[0] * self.xratio, (600 - params[1] - \
params[3]) * self.yratio, \
params[2] * self.xratio, params[3] * self.yratio), \
title = params[4])
self.unibuttons[len(self.unibuttons) - 1].background_color \
= (0.4,0.4,0.4)
self.unibuttons[len(self.unibuttons) - 1].action = function
self.unibuttons[len(self.unibuttons) - 1].height = params[3] * \
self.xratio
self.unibuttons[len(self.unibuttons) - 1].width = params[2] * \
self.yratio
self.unibuttons[len(self.unibuttons) - 1].tint_color = 'white'
self.unibuttons[len(self.unibuttons) - 1].font = ('<system>', \
17.5 * self.yratio)
self.root.add_subview(self.unibuttons[len(self.unibuttons) - 1])
python类Button()的实例源码
def test_Button(self):
a = ui.Button()
# Store attributes
a.title = "Hey, it's a thing!"
# Encode + decode
b = ui._view_from_dict(ui2.ui_io._view_to_dict(a), globals(), locals())
# Check that type and attributes were preserved
self.assertIsInstance(b, type(a))
self.assertEqual(a.title, b.title)
def make_button(name, bg_image_name, frame):
button = ui.Button(name=name)
button.frame = frame
button.bg_color = 'ivory'
button.border_color = 'black'
button.border_width = 1
button.background_image = ui.Image.named(bg_image_name)
button.enabled = True
return button
def _get_recog(self, recog_name, view, internal_action, final_handler):
view.touch_enabled = True
button = ui.Button()
key = str(uuid.uuid4())
button.name = key
button.action = internal_action
self.buttons[key] = button
self.views[key] = view
recognizer = ObjCClass(recog_name).alloc().initWithTarget_action_(button, sel('invokeAction:')).autorelease()
self.recognizers[key] = recognizer
self.actions[key] = final_handler
ObjCInstance(view).addGestureRecognizer_(recognizer)
recognizer.delegate = self._delegate
return recognizer
def tableview_cell_for_row(self, tv, section, row):
cell = ui.TableViewCell()
entry = self.flat_entries[row]
level = entry.level - 1
image_view = ui.ImageView(frame=(44 + 20*level, 5, 34, 34))
label_x = 44+34+8+20*level
label_w = cell.content_view.bounds.w - label_x - 8
if entry.subtitle:
label_frame = (label_x, 0, label_w, 26)
sub_label = ui.Label(frame=(label_x, 26, label_w, 14))
sub_label.font = ('<System>', 12)
sub_label.text = entry.subtitle
sub_label.text_color = '#999'
cell.content_view.add_subview(sub_label)
else:
label_frame = (label_x, 0, label_w, 44)
label = ui.Label(frame=label_frame)
if entry.subtitle:
label.font = ('<System>', 15)
else:
label.font = ('<System>', 18)
label.text = entry.title
label.flex = 'W'
cell.content_view.add_subview(label)
if entry.leaf and not entry.enabled:
label.text_color = '#999'
cell.content_view.add_subview(image_view)
if not entry.leaf:
has_children = entry.expanded
btn = ui.Button(image=ui.Image.named('CollapseFolder' if has_children else 'ExpandFolder'))
btn.frame = (20*level, 0, 44, 44)
btn.action = self.expand_dir_action
cell.content_view.add_subview(btn)
if entry.icon_name:
image_view.image = ui.Image.named(entry.icon_name)
else:
image_view.image = None
cell.selectable = entry.enabled
return cell
def __init__(self, *args, **kwargs):
ui.View.__init__(self, *args, **kwargs)
self.pinchgesture_recognizer_target = ui.Button()
self.pinchgesture_recognizer_target.action = self.did_pinch
self.pangesture_recognizer_target = ui.Button()
self.pangesture_recognizer_target.action = self.did_pan
self.gr_delegate=GRDelegate.alloc().init().autorelease()
self.recognizers={}
self_objc = ObjCInstance(self)
pinchobjctarget=ObjCInstance(self.pinchgesture_recognizer_target)
panobjctarget=ObjCInstance(self.pangesture_recognizer_target)
pinchrecognizer = ObjCClass('UIPinchGestureRecognizer').alloc()
self.recognizers['pinch'] = pinchrecognizer.initWithTarget_action_( pinchobjctarget, sel('invokeAction:')).autorelease()
panrecognizer = ObjCClass('UIPanGestureRecognizer').alloc()
self.recognizers['pan'] = panrecognizer.initWithTarget_action_( panobjctarget, sel('invokeAction:')).autorelease()
self.recognizers['pan'].setMinimumNumberOfTouches_(2)
for r in self.recognizers.values():
self_objc.addGestureRecognizer_(r)
r.setDelegate_(self.gr_delegate)
self.panx,self.pany,self.sx,self.sy=0,0,1,1
self.panx0,self.pany0,self.sx0,self.sy0=0,0,1,1
def __init__(self, *args, **kwargs):
ui.View.__init__(self, *args, **kwargs)
self.pinchgesture_recognizer_target = ui.Button()
self.pinchgesture_recognizer_target.action = self.did_pinch
self.pangesture_recognizer_target = ui.Button()
self.pangesture_recognizer_target.action = self.did_pan
self.gr_delegate=GRDelegate.alloc().init().autorelease()
self.recognizers={}
self_objc = ObjCInstance(self)
pinchobjctarget=ObjCInstance(self.pinchgesture_recognizer_target)
panobjctarget=ObjCInstance(self.pangesture_recognizer_target)
pinchrecognizer = ObjCClass('UIPinchGestureRecognizer').alloc()
self.recognizers['pinch'] = pinchrecognizer.initWithTarget_action_( pinchobjctarget, sel('invokeAction:')).autorelease()
panrecognizer = ObjCClass('UIPanGestureRecognizer').alloc()
self.recognizers['pan'] = panrecognizer.initWithTarget_action_( panobjctarget, sel('invokeAction:')).autorelease()
self.recognizers['pan'].setMinimumNumberOfTouches_(2)
for r in self.recognizers.values():
self_objc.addGestureRecognizer_(r)
r.setDelegate_(self.gr_delegate)
self.panx,self.pany,self.sx,self.sy=0,0,1,1
self.panx0,self.pany0,self.sx0,self.sy0=0,0,1,1
def create_toolbar_button(action,image,index=0,tag=''):
'''create a button on main toolbar, with action,imagename, index location, and string tagname. button and action are stored in __persistent_views[index]. tag allows finding view using tb.viewFromTag_(hash(tag)) (old idea)'''
assert(callable(action))
tb=get_toolbar(main_view)
global __persistent_views
try:
__persistent_views
except NameError:
__persistent_views={}
#check for existing button in this index and delete if needed
remove_toolbar_button(index)
#add new button to the left of the rightbuttons. index 0 is next to left buttons, index 1 is further left, etc
#store so it is not cleared.
btn=ui.Button( frame=(tb.size().width -
tb.rightItemsWidth()-(index+1)*40,22,40,40))
btn.flex='L'
btn.image=ui.Image.named(image)
btn.action=action
btn_obj=ObjCInstance(btn)
btn_obj.tag=hash(tag)
__persistent_views[index]=(btn,action,tag)
tb.addSubview_(btn_obj)
return btn
def make_button(self, title, i):
button = ui.Button(name=title, title=title.replace('_', ' '))
# interesting that getattr(self, ...) != self.getattr(...)
button.action = getattr(self, 'action_' + title.lower(), quit_action)
#print(title, button.action)
button.x = 30
button.y = 105 * (i + 1)
return button
def close_button(self):
the_button = ui.Button(title='X')
the_button.x = self.width - the_button.width
the_button.y = the_button.height / 2
the_button.action = self.close_action
the_button.font=('<system-bold>', 20)
return the_button
Three-Column-Sortable-TableView.py 文件源码
项目:pythonista-scripts
作者: khilnani
项目源码
文件源码
阅读 21
收藏 0
点赞 0
评论 0
def make_buttons(self, name):
button = ui.Button()
button.name = name
button.title = name
button.border_color = 'blue'
button.border_width = 1
button.corner_radius = 3
button.background_color = self.unselect_color
button.action = self.btn_action
self.add_subview(button)
return button
def _setup_cb(self):
'''set up encapsulated button as checkbox'''
tf=ui.Button()
tf.action=self._button_action
tf.width=self.width
tf.height=self.height
tf.flex='whtblr'
tf.title=self._get_checkbox_char()
self.add_subview(tf)
return tf
def setupkb(self):
#define keys
redokey=key(title='redo',action=self.redoaction)
undokey=key(title='undo',subkeys=[redokey], action=self.undoaction)
hidekey=key(title='hide',action=self.hideaction)
keymap=[key('\t',title='TAB'),key('_'),key('#',['@']),key('<',['<=']),key('>',['>=']),
key('{'),key('}'),key('['),key(']'),key("'",['"']),key('('),key(')'),
key(':',[';']), undokey]+[key(str(n)) for n in range(1,9)]+[key('0'),key('+',['%']),key('-'),key('/',['\\n','\\t','\\','/']),key('*'),key('=',['!=']), hidekey]
#customkb component
customkb=FlowContainer(frame=(0,self.height-100,self.width,100),flex='')
customkb.name='customkb'
self.add_subview(customkb)
minimizedkb=ui.Button(frame=(0,self.height-15,self.width,15),flex='',bg_color=(.7, .7, .7))
minimizedkb.action=self.showaction
minimizedkb.title=u'\u2550'*10
minimizedkb.name='minimizedkb'
self.add_subview(minimizedkb)
customkb.bring_to_front()
customkb.hidden=True
for k in keymap:
customkb.add_subview(k.makeButton())
customkb.flex='WT'
customkb.y=self.height-customkb.height
#contentframe
content=ui.View(frame=(0,0,self.width,self.height-15))
content.name='content'
self.add_subview(content)
content.send_to_back()
content.border_color=(0,0,1)
content.border_width=3
self.content=content
def did_load(self):
for s in self['scrollview1'].subviews:
if isinstance(s,ui.Button):
#pass
s.action = self.handlebutton
type(self)._lastinstance=self
def __init__(self):
self.schema_v = ui.TableView('grouped')
self.data_v = ui.TableView()
self.nbutton = ui.Button(title='Next')
self.pbutton = ui.Button(title='Prev')
def __init__(self):
# Init
self.views = []
self.curview = None
self.root = ui.View(name="Multipanel")
self.close = ui.Button()
self.close.name = "close"
self.close.enabled = False
self.close.image = ui.Image.named("ionicons-close-round-32")
self.close.action = self.close_tapped
self.root.add_subview(self.close)
self.close.frame = self.root.width - 32, 0, 32, 32
self.close.flex = "LB"
self.tabs = ui.SegmentedControl()
self.tabs.name = "tabs"
self.tabs.enabled = False
self.tabs.selected_index = -1
self.tabs.segments = [PLACEHOLDER_TEXT]
self.tabs.action = self.segment_changed
self.root.add_subview(self.tabs)
self.tabs.frame = 0, 0, self.root.width - self.close.width, self.tabs.height
self.tabs.flex = "WB"
self.placeholder = ui.View()
self.placeholder.background_color = "lightgray"
self.ph_label = ui.Label()
self.ph_label.font = ("<system-bold>", 24)
self.ph_label.text_color = "gray"
self.ph_label.text = "No View Selected"
self.placeholder.add_subview(self.ph_label)
self.ph_label.size_to_fit()
self.ph_label.center = self.placeholder.center
self.ph_label.flex = "TBLR"
self.update_view()
def __init__(self, control, spec, *args, **kwargs):
super().__init__(*args, **kwargs)
self.control = control
img_view = ui.ImageView(frame=self.bounds)
img_view.image = ui.Image.named("playfields/caves of soukka.png")
self.add_subview(img_view)
self.menu = ui.View(frame=(
30, self.height/2.1, self.width - 60, self.height/2 - 30
), corner_radius=10)
#self.menu.background_color=(0,0,0,0.7)
self.add_subview(self.menu)
(_,_,w,h) = self.menu.frame
def pick_map(sender):
self.control.load_map(next_func=self.control.set_map_for_play)
self.map_btn = ui.Button(title='Pick map', tint_color='white', background_color=self.menu_color, corner_radius=5, action=pick_map)
self.menu.add_subview(self.map_btn)
self.map_btn.frame = (0.05*w, 0.05*h, 0.55*w, 50)
(title, action) = spec[2]
self.menu_button(title, action, 50, (0.7*w, 0.05*h+25))
(title, action) = spec[1]
self.menu_button(title, action, 50, (0.9*w, 0.05*h+25))
self.icons = {}
self.small_icons = {}
for i in range(len(self.control.icon_names)):
icon = ui.Image.named(self.control.icon_names[i]).with_rendering_mode(ui.RENDERING_MODE_ORIGINAL)
small_icon = ui.Image.named(self.control.small_icon_names[i]).with_rendering_mode(ui.RENDERING_MODE_ORIGINAL)
name = 'player'+str(i)
self.icons[name] = icon
self.small_icons[name] = small_icon
btn = self.menu_color_button(
name, self.control.colors[i], icon,
(0.05*w + i*51, 0.25*h))
if i > 0:
self.toggle(btn)
(title, action) = spec[0]
self.menu_button(title, action, 50, (0.9*w, 0.25*h+25))
#btn = self.create_button
#self.set_menu('main', spec)
def __init__(self, frame=(0,0,150,32),
buttonSize = (32,32),
data = "this is a test".split(),
font = None,
initialItem = 0,
offset_eps = 0,
action = None,
fullSize = 300,
name = 'dropdown'):
self.frame = frame
self._position = [ self.frame[x] for x in (0,1)]
self.smallSize = frame[3]
self.bg_color = None
self.border_width = 0
self.border_color = 'black'
self.buttonSize = buttonSize
self._data = data
self.delegate = _DropDownDelegate(self)
if action:
if inspect.isfunction(action) and len(inspect.getargspec(action).args) == 2:
self.action = action
else:
raise TypeError('single argument function')
self.tvFrame = (0,0, self.frame[2] - self.buttonSize[0], self.buttonSize[1])
self.tv = ui.TableView(frame=self.tvFrame)
self.tv.row_height = self.smallSize
self.tv.name = 'tableview'
self.tv.allows_selection = True
self.tv.delegate = self.tv.data_source = self.delegate
self.tv.border_color = 'black'
self.tv.border_width = 1
self.button = ui.Button(frame = (self.frame[2]-self.buttonSize[0], 0) + self.buttonSize)
self.button.bg_color = 'white'
self.button.name = 'button'
self.button.action = self.onArrow
self.button.border_width = 1
self.button.border_color = 'black'
self.button.image=ui.Image.named('ionicons-arrow-down-b-24')
self.expanded = False
self.add_subview(self.tv)
self.tv.frame = self.tvFrame
self.add_subview(self.button)
self.fullSize = fullSize
self.smallSize = self.frame[3]
self.offset_eps = offset_eps
self.name = name
self._hidden = False
def create_accessory_toolbar(self):
from objc_util import ObjCClass, ObjCInstance, sel
def create_button(label, func):
button_width = 25
black = ObjCClass('UIColor').alloc().initWithWhite_alpha_(0.0, 1.0)
action_button = ui.Button()
action_button.action = func
accessory_button = ObjCClass('UIBarButtonItem').alloc().initWithTitle_style_target_action_(label, 0, action_button, sel('invokeAction:'))
accessory_button.width = button_width
accessory_button.tintColor = black
return (action_button, accessory_button)
vobj = ObjCInstance(self.markup)
keyboardToolbar = ObjCClass('UIToolbar').alloc().init()
keyboardToolbar.sizeToFit()
button_width = 25
black = ObjCClass('UIColor').alloc().initWithWhite_alpha_(0.0, 1.0)
# Create the buttons
# Need to retain references to the buttons used
# to handle clicks
(self.indentButton, indentBarButton) = create_button(u'\u21E5', self.indent)
(self.outdentButton, outdentBarButton) = create_button(u'\u21E4', self.outdent)
(self.quoteButton, quoteBarButton) = create_button('>', self.block_quote)
(self.linkButton, linkBarButton) = create_button('[]', self.link)
#(self.anchorButton, anchorBarButton) = create_button('<>', self.anchor)
(self.hashButton, hashBarButton) = create_button('#', self.heading)
(self.numberedButton, numberedBarButton) = create_button('1.', self.numbered_list)
(self.listButton, listBarButton) = create_button('•', self.unordered_list)
(self.underscoreButton, underscoreBarButton) = create_button('_', self.insert_underscore)
(self.backtickButton, backtickBarButton) = create_button('`', self.insert_backtick)
# Flex between buttons
f = ObjCClass('UIBarButtonItem').alloc().initWithBarButtonSystemItem_target_action_(5, None, None)
doneBarButton = ObjCClass('UIBarButtonItem').alloc().initWithBarButtonSystemItem_target_action_(0, vobj, sel('endEditing:'))
keyboardToolbar.items = [indentBarButton, f, outdentBarButton, f, quoteBarButton, f, linkBarButton, f, hashBarButton, f, numberedBarButton, f, listBarButton, f, underscoreBarButton, f, backtickBarButton, f, doneBarButton]
vobj.inputAccessoryView = keyboardToolbar
def tableview_cell_for_row(self, tableview, section, row):
if row >= self.extraRows:
element = self.elements[row-self.extraRows]
cell = ui.TableViewCell('subtitle')
cell.selectable = False
cell.text_label.text = element.get_title()
cell.detail_text_label.text = element.get_description()
cell.background_color=self.thememanager.main_background_colour
cell.image_view.image = ui.Image.named(element.get_icon())
params = element.get_params() or []
selectable = False
for p in params:
if p.display:
selectable = True
cell.accessory_type = 'disclosure_indicator'
cell.selectable = selectable
if self.currentElementNumber >= self.extraRows:
cell.selectable = False
if self.currentElementNumber+1 == row:
cell.background_color = self.thememanager.running_cell_background_colour
cell.text_label.text_color = self.thememanager.running_cell_text_colour
cell.detail_text_label.text_color = self.thememanager.running_cell_text_colour
else:
cell.background_color = self.thememanager.main_background_colour
cell.text_label.text_color = self.thememanager.main_text_colour
cell.detail_text_label.text_color = self.thememanager.main_text_colour
return cell
elif row == self.adminRow:
cell = ui.TableViewCell()
cell.background_color=self.thememanager.main_background_colour
cell.selectable = False
editButton = ui.Button(title='Done' if tableview.editing else 'Edit')
editButton.width *= 1.4
editButton.action = swap_edit
editButton.y = cell.height/2 - editButton.height/2
editButton.x = cell.width
cell.add_subview(editButton)
self.titleButton.y = cell.height/2 - editButton.height/2
self.titleButton.x = self.titleButton.width/2
self.titleButton.action = self.change_title
cell.add_subview(self.titleButton)
return cell
elif row == self.typeRow:
cell = ui.TableViewCell('value1')
cell.background_color=self.thememanager.main_background_colour
cell.selectable = True
cell.text_label.text_color = self.thememanager.main_text_colour
cell.detail_text_label.text_color = self.thememanager.main_text_colour
cell.text_label.text = 'Type of Flow'
cell.detail_text_label.text = self.flowType
return cell