Battez ui.View.flex dans Pythonista3

Je ne pouvais pas comprendre pleinement le comportement de pythonista3, j'ai donc essayé divers attributs flex de ui.View pour approfondir ma compréhension.

Essayez d'abord le mouvement

Faire glisser les quatre coins de l'écran modifie la taille, de sorte que vous pouvez vérifier visuellement les changements dans chaque mouvement.

ui_flex01.py


import ui

class ResizableView(ui.View):
	
	STA_IDLE = 1  #Attendre
	STA_MOVE_LT = 2  #Déplacer vers le coin supérieur gauche
	STA_MOVE_LB = 3  #Déplacer vers le bas à gauche
	STA_MOVE_RT = 4  #Déplacer vers le coin supérieur droit
	STA_MOVE_RB = 5
	STA_MOVE = 6
	
	
	def __init__(self):
		self.m_state = self.STA_IDLE
		
	def touch_began(self, touch):
		l = self.width * 0.1
		r = self.width * 0.9
		t = self.height * 0.1
		b = self.height * 0.9
		
		self.m_state = self.STA_IDLE
		
		if touch.location.x < l:
			if touch.location.y < t:
				self.m_state = self.STA_MOVE_LT
			if touch.location.y >= b:
				self.m_state = self.STA_MOVE_LB
		if touch.location.x >= r:
			if touch.location.y < t:
				self.m_state = self.STA_MOVE_RT
			if touch.location.y >= b:
				self.m_state = self.STA_MOVE_RB
		
		if self.m_state == self.STA_IDLE:
			self.m_state = self.STA_MOVE
		
		
	def touch_moved(self, touch):
		s = self.m_state
		vx = touch.location.x - touch.prev_location.x
		vy = touch.location.y - touch.prev_location.y
		
		if s == self.STA_IDLE:
			pass
		elif s == self.STA_MOVE_LT:
			self.x += vx
			self.y += vy
			self.width -= vx
			self.height -= vy
		elif s == self.STA_MOVE_RT:
			self.width += vx
			self.y += vy
			self.height -= vy
		elif s == self.STA_MOVE_LB:
			self.x += vx
			self.width -= vx
			self.height += vy
		elif s == self.STA_MOVE_RB:
			self.width += vx
			self.height += vy
		elif s == self.STA_MOVE:
			self.x += vx
			self.y += vy
		
	def touch_ended(self, touch):
		self.m_state = self.STA_IDLE

datas = (
	('RB',0,0,30,30),
	('LB',270,0,30,30),
	('RT',0,370,30,30),
	('LT',270,370,30,30),
	('W',50,40,200,50),
	('H',50,100,50,250),
	('R',100,100,100,50),
	('L',100,100,100,50),
	('LR',100,100,100,50),
	('RW',100,160,100,50),
	('LW',100,220,100,50),
	('RTW',110,300,50,50),
	('LTH',200,300,50,50),
	('',150,220,100,50),
	('RW',100,280,30,50),
	('RW',150,280,30,50),
	('RW',200,280,30,50),
	('RLW',100,340,30,50),
	('RLW',150,340,30,50),
	('RLW',200,340,30,50),

)

p = ui.View()
v = ResizableView()
v.width = 300
v.height = 400
v.background_color = '#808080'
p.add_subview(v)

for d in datas:
	l = ui.Label()
	l.border_width = 2
	l.alignment = ui.ALIGN_CENTER
	l.text = l.flex = d[0]
	l.frame = (d[1],d[2],d[3],d[4])
	v.add_subview(l)


p.present('fullscreen')
v.width = p.width
v.height = p.height
8874C09C-4259-42BE-8D37-BF99880219CE.png

Fonctionnalités Flex

Vous pouvez définir flex pour changer automatiquement votre position (x, y) et votre taille (largeur, hauteur) lorsque la vue parent se redimensionne.

Les caractères R, B, L, T, W et H peuvent être spécifiés et plusieurs combinaisons peuvent être spécifiées.

Par défaut «», «R», «RB»

Si vous spécifiez un caractère vide pour flex, x, y, largeur et hauteur ne sont pas affectés par le redimensionnement de la vue parent. C'est le même comportement que lorsque «R» ou «RB» est spécifié.

Adsorbé à l'extrémité droite «L»

Spécifier «L» pour flex donne une marge gauche flexible. Traduit littéralement, la marge gauche change de manière flexible. Si vous le traduisez librement, il restera à l'extrémité droite de la vue parent.

Cela signifie que cette vue restera à droite lorsque la taille de la vue parent change.

Adsorbé à chaque extrémité «R», «B», «T»

Comme «L»

«R» est attaché au bord gauche de la vue parent «B» est attaché en haut de la vue parent. (Comportement par défaut) «T» est attaché au bord inférieur de la vue parent

Ce sera.

Personnellement, le sens de LRBT est exactement le contraire, mais suis-je le seul à le penser?

Suivez la taille «W», «H»

Si vous spécifiez «W», la largeur changera en fonction du changement de taille du parent. Si vous spécifiez «H», la hauteur changera en fonction du changement de taille du parent.

Conserver la position relative sur la vue parent «RL», «BT»

Je souhaite organiser plusieurs boutons à intervalles égaux, même si la taille du parent change. Je vais l'utiliser à ce moment-là. Dans la plupart des cas, il est également nécessaire de changer la taille, donc je pense que «RLW» et «BTH» sont souvent utilisés en plus de WH.

Recommended Posts

Battez ui.View.flex dans Pythonista3
Refaire Python dans Pythonista3 (1) --appex
Dessin 3D avec SceneKit dans Pythonista
Afficher aléatoirement les cartes à jouer dans la scène Pythonista +