Spielen Sie mit dem UI-Modul von pythonista3

Ich werde darüber schreiben, was ich versucht habe, das Verhalten des UI-Moduls zu verstehen, das mit Pythonista 3 unter iOS geliefert wird.

Zunaechst

Was ist Pythonista3?

Python-Ausführungsumgebung & Editor & Interprinter unter iOS. Die Interpolationsfunktion und die Konsole, mit der Sie den Inhalt von Variablen überprüfen können, sind hervorragende Dinge, die Sie dort erreichen können, wo es juckt.

Was ist ein UI-Modul?

Dies ist ein Standardmodul, das in Pythonista enthalten ist. Es ist nicht multifunktional, aber es enthält das Nötigste.

Es gibt ein GUI-Tool namens UI Designer, aber ich möchte nur mit Skripten damit herumspielen.

Die einfachste UI-Zeichnung

Auf dem Bildschirm wird nichts angezeigt, aber es ist ein schönes (?) UI-Programm

ui01.py


import ui

v = ui.View()
v.present('panel')

Wenn ich es starte, erscheint nichts auf dem Bildschirm.

740B9E3B-FFB2-4CB4-AC1F-880BDA972034.png

Zeige Hallo Welt

Ich bin einsam, wenn nichts getan wird, also lasst uns Hallo Welt anzeigen.

ui02.py



import ui

#Hello World
v = ui.View()

l = ui.Label()
l.text = 'Hello World'
v.add_subview(l)

v.present('panel')
845D2E9F-1AA4-4BD6-B9E3-702BFE20801E.png

Wie groß ist die Kinderansicht?

Fügen Sie einen Rahmen hinzu, um das Verständnis zu erleichtern.

ui03.py


import ui

#Hello World
v = ui.View()

l = ui.Label()
l.text = 'Hello World'
l.border_width = 2
v.add_subview(l)

v.present('panel')

Ich dachte nicht, dass es ein Quadrat ist. A65C5AB4-02C5-41EF-A23B-8C9707F0F8CD.png

Versuchen Sie, zwei Kinder hinzuzufügen

Wenn es so belassen würde, wie es war, würde es überlappend angezeigt, sodass das zweite die Koordinaten spezifizierte.

ui04.py


import ui

#Hello World
v = ui.View()

l = ui.Label()
l.text = 'Hello'
l.border_width = 2
v.add_subview(l)

l2 = ui.Label()
l2.text = 'World'
l2.border_width = 2
l2.x = 50
l2.y = 110
v.add_subview(l2)

v.present('panel')
26A2154E-E959-4062-BA65-4674D5BDD96A.png

Verbreiten Sie sich auf das Ganze

Verteilen Sie es über das gesamte Panel.

Nachtrag Die Angabe von "WH" für "Flex" bedeutete nicht, es überall zu verteilen. .. .. Dazu später mehr

ui05.py


import ui

#Hello World
v = ui.View()

l = ui.Label()
l.text = 'Hello World'
l.border_width = 2
l.flex = 'WH'
v.add_subview(l)

v.present('panel')

Die Zeichen werden nach links verschoben, da die Beschriftungsausrichtung nicht angegeben ist.

1A8AD87D-36CF-43C1-BC9E-8FA16EABE05B.png

Bildlaufleiste anzeigen

Es fühlt sich an, als könnten Sie scrollen, wenn der Inhaltsbereich (content_size) größer als der Ansichtsbereich ist. Es scheint, dass Sie sich den Bereich der Ansicht ansehen, um ihn mithilfe von Flex automatisch zu erweitern und zu verkleinern. Daher müssen Sie möglicherweise vorsichtig sein, wie Sie contnt_size angeben.

ui06.py


import ui

label_count = 10
label_height = 100

v = ui.ScrollView()
v.content_size = (100, label_count * label_height)

for i in range(label_count):
	l = ui.Label()
	l.text = 'TestLabel:' + str(i)
	l.y = i * label_height
	l.border_width = 2
	l.flex = 'W'
	
	v.add_subview(l)

v.present('panel')
20304A95-3A36-43E7-A054-F8E31434537F.png

Ereignisuntersuchung beim Erstellen einer benutzerdefinierten Ansicht

Erstellen und überprüfen Sie den Zeitpunkt des Neuzeichnens und die Häufigkeit von Ereignissen. Wenn das Bedienfeld vorhanden ist, wird das Berührungsereignis möglicherweise nicht gut aufgenommen. Überprüfen Sie dies daher im Vollbildmodus. (Es scheint der Effekt zu sein, den Bildschirm durch Wischen nach links und rechts zu wechseln.)

ui07.py


import ui

class MyView(ui.View):
	def __init__(self):
		l = ui.Label(name='poslabel')
		l.background_color = '#dddddd'
		l.flex = 'W'
		l.height = 50
		self.add_subview(l)
		
		l2 = ui.Label(name='loglabel')
		l2.background_color = '#ddddff'
		l2.flex = 'W'
		l2.number_of_lines = 0
		l2.y = l.height
		l2.height = 600 - l.height
		self.add_subview(l2)
		
		self.m_logs = []
		pass
		
	def log_msg(self, msg):
		self.m_logs.append(msg)
		self['loglabel'].text = "\n".join(self.m_logs[-20:])
		
	def log_touch(self, touch):
		self['poslabel'].text = str(touch.location)
		
	def did_load(self):
		self.log_msg('did_load called.')
		
	def will_close(self):
		self.log_msg('will_close called.')
		
	def draw(self):
		self.log_msg('draw called.')
		
	def layout(self):
		self.log_msg('layout called.')
		
	def touch_began(self, touch):
		self.log_msg('touch_began called.' + str(touch.location))
		self.log_touch(touch)
		
	def touch_moved(self, touch):
		self.log_msg('touch_moved called.' + str(touch.location))
		self.log_touch(touch)
	
	def touch_ended(self, touch):
		self.log_msg('touch_ended called.' + str(touch.location))
		self.log_touch(touch)
		
v = MyView()
v.present('fullscreen')
DE1C78A0-0B71-4D75-A460-DAA9B300B693.png

Selbst wenn für Flex „WH“ angegeben ist, verteilt es sich nicht über den gesamten Bildschirm! ??

Ich habe Flex völlig missverstanden. Passt flex seine Größe automatisch an, wenn sich die Größe der Eltern ändert? Selbst wenn ich "WH" angegeben habe, wollte ich nicht die Größe des Elternteils anpassen, um meine Größe entsprechend der Änderung der Größe des Elternteils zu ändern.

In ui06.py schien sich über den gesamten Bildschirm zu verteilen, dass ich einem Kind mit einer Ansicht mit einer Standardgröße von 100 x 100 eine Beschriftung mit einer Größe von 100 x 100 hinzugefügt habe. Wenn also die übergeordnete Größe mit Gegenwart im Vollbildmodus angezeigt wird, auch das Kind Es wurde nur gedehnt und vergrößert.

Sie können es sehen, indem Sie Folgendes tun. Das Kommentieren des Teils, der Breite und Höhe zuweist, wird sich wahrscheinlich so verhalten, wie die meisten Leute es erwartet hätten.

ui08.py


import ui

v = ui.View()
v.border_color = '#ff0000'
v.border_width = 2
v.background_color = '#999999'

v.present('fullscreen')

l = ui.Label()
l.border_width = 2
l.flex = 'WH'
l.text = 'Label'
#l.width = v.width
#l.height = v.height
v.add_subview(l)
DC39039F-ADB4-480F-9724-4C78C7869FB8.png

Recommended Posts

Spielen Sie mit dem UI-Modul von pythonista3
Spielen Sie mit der Implementierung der Pythonista 3-Benutzeroberfläche [Super Super Primer]
Spielen Sie mit der Pythonista-UI-Implementierung [Action-Implementierung]
Spielen Sie mit der Implementierung der Pythonista-Benutzeroberfläche [Bildschirmelemente]
Spielen Sie mit Linux-Partitionen herum
Spielen Sie mit dem MD-Modul von ASE
Spielen Sie mit dem Raspberry Pi Zero WH-Kameramodul Teil 1
Spielen Sie mit dem PIR-Sensormodul [DSUN-PIR]
Spielen Sie mit Linux-Partitionen herum ~ Fortsetzung ~
Berühren Sie die Twitter-Liste mit Tweepy
Spielen Sie mit Dajare mithilfe der COTOHA-API
Spiel mit dem Propheten
Schneiden Sie das Bild mit Pythonista auf abgerundete Ecken
Spiele mit PyTorch
Python: Versuchen Sie, die Benutzeroberfläche von Pythonista 3 auf dem iPad zu verwenden
Ich wollte mit der Bezier-Kurve spielen
Spielen Sie mit 2016-Python
Angeben des Modulladeziels mit GAE-Python
Spielen Sie mit CentOS 8
Spiel mit der Pyramide
Spiel mit Fathom
Spielen Sie mit der von Yahoo bereitgestellten Stromverbrauchs-API
Laden Sie das gleichnamige Modul an einer anderen Stelle
Spiel mit Othello (Reversi)
Der Weg nach Pythonista
Laden Sie das Modul dynamisch.
Versuchen Sie, mit dem Uprobe zu spielen, der Systemtap direkt unterstützt
Warum kann ich das Modul durch Importieren mit Python verwenden?
Mindestkenntnisse, um mit dem Python-Protokollierungsmodul zu beginnen
Machen Sie ein BLE-Thermometer und ermitteln Sie die Temperatur mit Pythonista3
Spielen Sie mit dem Passwortmechanismus von GitHub Webhook und Python