python - 如何调用函数: def(dot) and def(dice) from def(main)?

标签 python function graphics

我在从第三个(主)函数调用前两个函数时遇到问题。我相信我的编码正确(忽略大小和 x,y 坐标)来显示 di 的五边,但似乎无法弄清楚如何调用这些函数。

主要目标是显示 di 的五个面。

def dot(c,d):
 #draw each dot 
 circDot1 = Circle(Point(50, 50), 5).setFill('black')
 circDot1.draw(win)
 circDot3 = Circle(Point(50, 100), 5).setFill('black')
 circDot3.draw(win)
 circDot5 = Circle(Point(100, 50), 5).setFill('black')
 circDot5.draw(win)
 circDot7 = Circle(Point(100, 100), 5).setFill('black')
 circDot7.draw(win)
 circDot4 = Circle(Point(75, 75), 5).setFill('black')
 circDot4.draw(win)

def dice(a,b):

 #build the dice
 rectDice = Rectangle(Point(115, 115), Point(275,275))
 rectDice.setFill('pink')
 rectDice.setOutline('pink')
 rectDice.draw(win)


def main():
 # Create window, call dice function
 win = GraphWin("Dice", 400, 400)
 win.setBackground("cyan")
 dice("a","b")

最佳答案

有几个问题:

您没有执行 main() 来运行程序,但也许您没有仅在有问题时添加它。

<小时/>

win 是局部变量,函数无法访问它们。您应该在错误消息中看到它:NameError: name 'win' is not Defined in rectDice.draw(win)

Traceback (most recent call last):
  File "<pyshell#2>", line 30, in <module>
    main()
  File "<pyshell#2>", line 28, in main
    dice("a","b")
  File "<pyshell#2>", line 21, in dice
    rectDice.draw(win)
NameError: name 'win' is not defined

您可以添加 win 作为参数

def dice(win, a, b):
    #build the dice
    rectDice = Rectangle(Point(115, 115), Point(275,275))
    rectDice.setFill('pink')
    rectDice.setOutline('pink')
    rectDice.draw(win)

def main():
    # Create window, call dice function
    win = GraphWin("Dice", 400, 400)
    win.setBackground("cyan")
    dice(win, "a","b")

或者您必须将窗口分配给全局变量 - 在 main() 中使用 global

def dice(a, b):
    #build the dice
    rectDice = Rectangle(Point(115, 115), Point(275,275))
    rectDice.setFill('pink')
    rectDice.setOutline('pink')
    rectDice.draw(win)

def main():
    global win

    # Create window, call dice function
    win = GraphWin("Dice", 400, 400)
    win.setBackground("cyan")
    dice("a", "b")

同样的问题出现在dot()

<小时/>

dot()中你还有其他问题。您必须在下一行中使用 setFill()

circDot1 = Circle(Point(50, 50), 5)
circDot1.setFill('black')
circDot1.draw(win)
<小时/>

完整代码:

from graphics import *

def dot(win, c, d):
    #draw each dot 
    circDot1 = Circle(Point(50, 50), 5)
    circDot1.setFill('black')
    circDot1.draw(win)

    circDot3 = Circle(Point(50, 100), 5)
    circDot3.setFill('black')
    circDot3.draw(win)

    circDot5 = Circle(Point(100, 50), 5)
    circDot5.setFill('black')
    circDot5.draw(win)

    circDot7 = Circle(Point(100, 100), 5)
    circDot7.setFill('black')
    circDot7.draw(win)

    circDot4 = Circle(Point(75, 75), 5)
    circDot4.setFill('black')
    circDot4.draw(win)

def dice(win, a, b):
    #build the dice
    rectDice = Rectangle(Point(115, 115), Point(275,275))
    rectDice.setFill('pink')
    rectDice.setOutline('pink')
    rectDice.draw(win)


def main():
    # Create window, call dice function
    win = GraphWin("Dice", 400, 400)
    win.setBackground("cyan")
    dice(win, "a", "b")
    dot(win, "c", "d")

main() 

关于python - 如何调用函数: def(dot) and def(dice) from def(main)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57318943/

相关文章:

css - SASS 函数迭代 nth-child(n+1) 和 lighten/darken($color, 5n%)

python - [Python]调用方法(self)

python - 表示 SQLAlchemy 中偏移日期的混合属性

sql - 用户定义的函数在sql server中返回null

javascript - 简化一个工作函数来替换特定的单词?

java - 我该怎么做才能使程序不从最后添加的点开始绘制?

r - 如何在 R 中启动新的图形窗口和/或图形页面

java - java 如何知道鼠标点击是否在图形图像上

python - Pip 安装 EOFError

python - 在 kivy 中的触摸事件上旋转对象