在Tkinter按钮内的Python上更新dict中的值

时间:2016-06-21 05:43:39

标签: python dictionary tkinter

我正在尝试使用Python为游戏编写一些代码,并且似乎无法将我的变量从按钮单击命令中导入到字典变量中供以后使用。我要做的是在按钮单击上运行jingle_add(),让它运行一些计算,更新显示并返回使用的树值并更改回相应的字典键。我可以让代码工作,如果在jingle_add()中我直接调用字典值,但我正在尝试压缩我的代码并将其用作多个不同类型的值的模板,这些值将保存在同一个字典中,用不同的按钮调用它们。但是,对于下面的代码版本,我根本无法运行它,并且没有给出明显的错误,只有lambda行的标志。我在lambda电话中缺少什么,或者我在回程中错过了什么?

data = {'fans': 0, 'jingle': 0, 'jingle_cost': 15}

jingle_button = Button(win, text = "Make a jingle - +0.1 fans/sec", command = lambda: data['fans'], data['jingle_cost'], data['jingle'] = jingle_add(data['fans'], data['jingle_cost'], data['jingle']))

def jingle_add(fans, cost, building):
    if fans >= cost:
        fans -= cost
        cost = round(cost * (1.07**building), 1)
        building += 1
        return fans, cost, building

2 个答案:

答案 0 :(得分:1)

在当前形式中,由于lambda表达式中的赋值,您的代码无法编译。另一种方法是定义函数中的功能,并将函数用作回调:

def add_to_data():
    data['fans'], data['jingle_cost'], data['jingle'] = jingle_add(data['fans'], data['jingle_cost'], data['jingle'])

jingle_button = Button(win,
    text = "Make a jingle - +0.1 fans/sec", command = add_to_data)

(注意add_to_data在用作command参数时不带圆括号。)

答案 1 :(得分:0)

请提及您从哪里获得可变'成本'。 并尝试打印一些检查它是否进入第一个循环:

//Code of destination UIView
import UIKit
import CoreData
class ReviewViewController: UIViewController {

@IBOutlet var backgroundImageView:UIImageView!
var backgroundImage : UIImage!
var subject:Semester!       

override func viewDidLoad() {
super.viewDidLoad()
//backgroundImageView?.image = UIImage(data: subject.image!)
backgroundImageView?.image = self. backgroundImage
let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.Dark)
let blurEffectView = UIVisualEffectView(effect: blurEffect)
blurEffectView.frame = view.bounds
backgroundImageView.addSubview(blurEffectView)

// Code of Source UIView
import UIKit
import CoreData

class SubjectDetailViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet var facultyImageView:UIImageView!
var subject:Semester!

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)        {
if segue.identifier == "destinationidentifier"
{
        let destinationController = segue.destinationViewController as! ReviewViewController
        destinationController.backgroundImage = self.facultyImageView.image
 }
}

您的代码是否正确,请检查您正在循环使用的值。