отображение переменной во всплывающем окне с кивом - PullRequest
0 голосов
/ 05 марта 2020

Я пытаюсь создать программу, которая читает словарь после того, как пользователь вводит свое имя и назначает случайный выбор на основе взвешенных значений в словаре. На данный момент логика c для выбора случайного значения из словаря работает, но у меня он выводится на консоль. Я хотел бы, чтобы он появился во всплывающем окне (которое у меня есть, но я не могу получить выходную переменную, чтобы показать там)

four.kv

WindowManager:
    MainWindow:

<MainWindow>:
    name:'main'
    player_python:player_kv

    GridLayout:
        cols:1

        GridLayout:
            cols:2

            Label:
                text:'Player:'

            TextInput:
                id: player_kv
                multiline: False

        Button:
            text: 'Random'
            on_press: root.btn()


<P>:
    output:output

    FloatLayout:
        Label:
            id: output

main4.py

import kivy
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.widget import Widget
from kivy.properties import ObjectProperty
from kivy.uix.label import Label
from kivy.uix.popup import Popup
from kivy.uix.floatlayout import FloatLayout
from kivy.properties import StringProperty

import random
#from Dict import *
#### example dictionary
character = {
'John':
            {'Water': 2,            #50%
             'Fire': 1,              #25%
             'Earth': 1,},           #25%
'Bill':
            {'Water': 1,         #25%
             'Fire': 2,             #50%
             'Earth': 1,}}         #25%
####
class MainWindow(Screen):
    player_python = ObjectProperty(None)
    output = StringProperty('')

    def btn(self):
        show_popup()
        player = self.player_python.text
        weighted_list = []


        for c in character[player]:
            for w in range(character[player][c]):
                weighted_list.append(c)
        self.output= random.choice(weighted_list)

        print(self.output)            ###### instead of this printing to console I want it to display in popup window

        self.player_python.text = ''

class P(FloatLayout):
    pass



def show_popup():
    show = P()
    popupWindow = Popup(title='random character', content=show, size_hint=(None,None),size=(400,400) )
    popupWindow.open()


class WindowManager(ScreenManager):
    pass


kv = Builder.load_file('four.kv')


class FourApp(App):
    def build(self):
        return kv


if __name__ == '__main__':
    FourApp().run()

https://gist.github.com/PatrickToole/00cc72cdd7ff5146976e5d92baad8e02

Заранее спасибо

-P

1 Ответ

0 голосов
/ 06 марта 2020

Я не проверял этот код, но попробуйте передать self.output вашему show_popup() методу. Это будет означать изменение вашего метода btn() на что-то вроде:

def btn(self):
    player = self.player_python.text
    weighted_list = []


    for c in character[player]:
        for w in range(character[player][c]):
            weighted_list.append(c)
    self.output= random.choice(weighted_list)

    print(self.output)            ###### instead of this printing to console I want it to display in popup window

    self.player_python.text = ''
    show_popup(self.output)

А в методе show_popup():

def show_popup(output):
    show = P()
    show.output.text = output
    popupWindow = Popup(title='random character', content=show, size_hint=(None,None),size=(400,400) )
    popupWindow.open()

Как я уже говорил, я не тестировал этот код , но что-то вроде этого должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...