Сделайте кнопку, открывающую окно на Beeware
Я новичок в программировании, примерно через 2 недели. Но для школьного проекта я пытаюсь создать приложение. Чтобы мой Python работал на Android, я использую пакет Beeware. Итак, что я хочу сделать, так это то, что на Android, когда я нажимаю кнопку, я хочу, чтобы открывалось новое окно. Например, когда вы находитесь в инстаграмме и нажимаете на чей-то профиль. Вот код, который я делал до сих пор.
import toga
from toga.style import Pack
from toga.style.pack import COLUMN, ROW
def about(button, formal_name='a'):
main_box = toga.Box(style=Pack(direction=COLUMN, background_color='#7ed6c6'))
hello = toga.Label('Hello there!')
main_window = toga.MainWindow(title=formal_name)
main_window.content = main_box
main_window.show()
main_box.add(hello)
class Casa_musica(toga.App):
def startup(self):
main_box = toga.Box(style=Pack(direction=COLUMN, background_color='#7ed6c6', padding=20))
button = toga.Button(
'Click me', on_press=about)
self.main_window = toga.MainWindow(title=self.formal_name)
self.main_window.content = main_box
self.main_window.show()
main_box.add(button)
def main():
return Casa_musica()
3 ответа
Вы поняли это? Я тоже над этим работаю. Я пробовал это до сих пор:
# add a button to the main window
nav_button = toga.Button(
'Open second window.',
on_press=self.nav_window_two,
style=Pack(padding=5)
)
# ...
main_box.add(nav_button)
Затем определите функцию, которую мы вызвали в "on_press" для кнопки выше:
def nav_window_two(self, widget):
window_two_box = toga.Box(style=Pack(direction=COLUMN))
window_two_hello_label = toga.Label(
'Wow you made it to the second window!',
style=Pack(padding=(0, 5))
)
window_two_box.add(window_two_hello_label)
self.window_two = toga.Window()
self.window_two.content = window_two_box
self.window_two.show()
Новая кнопка nav_button выполняет рендеринг на главном экране, но нажатие на нее ничего не делает. Мне интересно, просто возвращается к основному циклу.
Не уверен, что это правильный путь, но я предлагаю сделать функцию, метод и поместить в класс Casa_musica... Обратите внимание на self.about и добавил self в метод. "Main_box.add(hello)" перемещен вверх.
Пожалуйста, попробуйте рассказать мне, как это происходит.:)
class Casa_musica(toga.App):
def startup(self):
main_box = toga.Box(style=Pack(direction=COLUMN, background_color='#7ed6c6', padding=20))
button = toga.Button(
'Click me', on_press=self.about)
self.main_window = toga.MainWindow(title=self.formal_name)
self.main_window.content = main_box
self.main_window.show()
main_box.add(button)
def about(self):
main_box = toga.Box(style=Pack(direction=COLUMN, background_color='#7ed6c6'))
hello = toga.Label('Hello there!')
main_box.add(hello)
self.main_window = toga.MainWindow(title=formal_name)
self.main_window.content = main_box
self.main_window.show()
Это то, что я сделал, он работает на Mac и Windows, но мне не повезло с Android. Однако я не тестировал его с iOS.
def showProgressWindow(self):
main_box2 = toga.Box(style=Pack(direction=COLUMN, padding=5))
self.lblStatus = toga.Label('Here you will see the progress of the process')
self.tiProgress = toga.MultilineTextInput(style=Pack(flex=1))
content_box = toga.Box(style=Pack(direction=ROW, padding=5))
content_box.add(self.tiProgress)
button_box = toga.Box(style=Pack(direction=ROW, padding=5))
btnClose = toga.Button(
'Close this window',
on_press=self.main_window.show(),
style=Pack(padding=5)
)
button_box.add(btnClose)
main_box2.add(self.lblStatus)
main_box2.add(button_box)
main_box2.add(content_box)
self.progressWindow = toga.Window(title='Progress')
self.progressWindow.content = main_box2
self.progressWindow.show()
Затем я просто вызвал его в MainWindow через кнопку...
btnMain = toga.Button(
'START',
on_press=self.showProgressWindow,
style=Pack(padding=5)
)
Или вы можете автоматически открыть его в одной из ваших функций asyncio:
thread.Threading(target=showProgressWindow).start()
await asyncio.sleep(7)
Думаю, это решит ваш вопрос.
Я попробовал, и он открывает новое окно в том же приложении. Закрытие главного окна необязательно, поэтому я удалил эту строку.
import toga
from toga.style import Pack
from toga.style.pack import COLUMN, ROW
class MultiWindow(toga.App):
def startup(self):
main_box = toga.Box()
main_box.add(toga.Button('Open Window', on_press=self.show_second_window))
self.main_window = toga.Window(title=self.formal_name, closeable=True)
self.main_window.content = main_box
self.main_window.show()
def show_second_window(self, widget):
outer_box = toga.Box()
self.second_window = toga.Window(title='Second window')
self.windows.add(self.second_window)
self.second_window.content = outer_box
self.second_window.show()
def main():
return MultiWindow()