【发布时间】:2016-12-06 01:02:47
【问题描述】:
我有一个函数范围问题。在调用评估函数后,按下“放弃”按钮时,我需要更新“cardTableLayout”。我该怎么做呢?我知道这是一个 kv 布局语言问题。我不确定如何从“buttonClick_callback”中引用“cardTableLayout”。
蟒蛇代码
import sys
from os import path, listdir
from random import choice
sys.path.append('libs')
from good_deal import *
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.floatlayout import FloatLayout
from kivy.core.audio import SoundLoader
from kivy.uix.button import Button
from kivy.uix.image import Image
from kivy.uix.behaviors import ToggleButtonBehavior
from kivy.clock import mainthread
randomSong = choice(listdir('music'))
backgroundMusic = SoundLoader.load(path.join('music', randomSong))
backgroundMusic.play()
backgroundMusic.loop = True
cardImagesGlobal = []
hand, deck = deal()
class ScreenManagement(ScreenManager): pass
class Card(ToggleButtonBehavior, Image): pass
class GameButton(Button): pass
def buttonClick_callback(self):
buttonClickSound = SoundLoader.load(path.join('sounds', 'buttonClick.ogg'))
buttonClickSound.play()
index = 0
for items in cardImagesGlobal:
if items.state == 'down':
hand.marked.append(index)
index += 1
discard(hand, deck)
evaluate(hand)
class CardTableScreen(Screen):
@mainthread
def on_enter(self):
global cardImagesGlobal
cardImages = []
self.ids['handType'].text = hand.type
index = 0
for items in hand.ordered:
cardImages.append(Card(source = hand.filenames[index]))
self.ids['handLayout'].add_widget(cardImages[index])
index += 1
cardImagesGlobal = cardImages
discardButton = GameButton(text = 'DISCARD')
discardButton.bind(on_press = buttonClick_callback)
self.ids['cardTableLayout'].add_widget(discardButton)
layoutFile = Builder.load_file('main.kv')
class Main(App):
def build(self):
self.title = 'Good Deal Poker'
return layoutFile
if __name__ == "__main__":
Main().run()
.kv 文件
ScreenManagement:
CardTableScreen:
<Card>:
size_hint: (.95, .95)
<GameButton>:
size_hint: (.20, .10)
<CardTableScreen>:
name: 'cardTableScreen'
FloatLayout:
name: 'cardTableLayout'
id: cardTableLayout
canvas.before:
Color:
rgba: 0,.25,0,1
Rectangle:
pos: self.pos
size: self.size
Label:
name: 'handType'
id: handType
font_size: '20sp'
pos_hint: {'center_x':.5, 'center_y':.95}
BoxLayout:
size_hint: (1, .30)
pos_hint: {'center_x':.5, 'center_y':.75}
name: 'handLayout'
id: handLayout
orientation: 'horizontal'
canvas.before:
Color:
rgba: 0,.25,0,1
Rectangle:
pos: self.pos
size: self.size
【问题讨论】:
标签: python image layout scope kivy