вы правы, желая использовать PageLayout
, и это можно сделать, просто выполните следующие действия:
Шаг 1 : в вашем main.py добавьте эту строку:
from kivy.uix.pagelayout import PageLayout
Затем в вашем CalcGridLayout
классе наследуют от PageLayout
вместо GridLayout
, например:
class CalcGridLayout(PageLayout):
Шаг 02 : в вашем калькуляторе.kv сразу после <CalcGridLayout>:
добавьте следующее:
GridLayout:
, затем сделайте отступ для вашего кода по мере необходимости. Рабочий пример приведен ниже ... взято из вашего кода: main.py
from __future__ import division
import kivy
from math import sqrt
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.pagelayout import PageLayout
from kivy.config import Config
from kivy.uix.pagelayout import PageLayout
class CalcGridLayout(PageLayout):
def something(x):
x+="hi"
return x
# Function called when equals is pressed
def calculate(self, calculation):
if calculation:
try:
# Solve formula and display it in entry
# which is pointed at by display
self.display.text = str(eval(calculation))
except Exception:
self.display.text = "Galat Hai Bhai !"
class CalculatorApp(App):
def build(self):
return CalcGridLayout()
if __name__=='__main__':
calcApp = CalculatorApp()
calcApp.run()
и calculator.kv
# Custom button
<CustButton@Button>:
font_size: 65
#color:.25,.80,.92,1
size:100,100
background_color:.50,.50,.50,1
# Define id so I can refer to the CalcGridLayout
# class functions
# Display points to the entry widget
<CalcGridLayout>:
GridLayout:
id: calculator
display: entry
rows: 8
padding: 0
spacing: 0
# Where input is displayed
BoxLayout:
TextInput:
id: entry
font_size: 80
multiline: False
# When buttons are pressed update the entry
BoxLayout:
spacing: 0
CustButton:
text: "7"
on_press: entry.text += self.text
CustButton:
text: "8"
on_press: entry.text += self.text
CustButton:
text: "9"
on_press: entry.text += self.text
CustButton:
text: "+"
on_press: entry.text += self.text
BoxLayout:
spacing: 0
CustButton:
text: "4"
on_press: entry.text += self.text
CustButton:
text: "5"
on_press: entry.text += self.text
CustButton:
text: "6"
on_press: entry.text += self.text
CustButton:
text: "-"
on_press: entry.text += self.text
BoxLayout:
spacing: 0
CustButton:
text: "1"
on_press: entry.text += self.text
CustButton:
text: "2"
on_press: entry.text += self.text
CustButton:
text: "3"
on_press: entry.text += self.text
CustButton:
text: "*"
on_press: entry.text += self.text
# When equals is pressed pass text in the entry
# to the calculate function
BoxLayout:
spacing: 0
CustButton:
text: "AC"
on_press: entry.text = ""
CustButton:
text: "0"
on_press: entry.text += self.text
CustButton:
text: "="
on_press: calculator.calculate(entry.text)
CustButton:
text: "/"
on_press: entry.text += self.text
#my new layout
BoxLayout:
spacing: 0
CustButton:
text: "Del"
on_press: entry.text =entry.text[:-1]
CustButton:
text: "Pow"
on_press: entry.text += '**'
CustButton:
text: "//"
on_press: entry.text +=self.text
CustButton:
text: "mod"
on_press: entry.text +='%'
BoxLayout:
CustButton:
text: "Made for learning face"
BoxLayout:
id: test
Button:
text: 'You can then add more widgets here'
И наконец, в отношении эмулятора это не настоящий эмулятор в kivy, однако вы можете смоделировать устройство, настроив приложение для запуска на определенном устройстве.например, для запуска вашего приложения, имитирующего Motorola droid 2:
KIVY_DPI=240 KIVY_METRICS_DENSITY=1.5 python main.py --size 854x480
или HTC ONE X:
KIVY_DPI=320 KIVY_METRICS_DENSITY=2 python main.py --size 1280x720
или любое другое устройство:
KIVY_DPI=<your-desired-dpi> KIVY_METRICS_DENSITY=<your-device-density> python main.py --size <your-device-size>