鱼C论坛

 找回密码
 立即注册
查看: 1808|回复: 9

[已解决]使用tkinter画一个随机符号的井字盘的问题

[复制链接]
发表于 2017-4-15 20:57:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
使用random生成1或者0,然后随机在九宫格中显示x或者o图像,按理说结果应该是这个样子的,

                               
登录/注册后可看大图


但是我做的总是只有一个标签显示图片T T请大家帮我看下问题出现在哪里

                               
登录/注册后可看大图


  1. from tkinter import *
  2. import random
  3. window = Tk()

  4. for i in range(9):
  5.      n = random.randint(0,1)
  6.      imageo = PhotoImage(file='o.gif')
  7.      imagex = PhotoImage(file='cross.gif')
  8.      Row = i//3
  9.      Column = i%3
  10.      Label(window,image=imageo if n==0 else imagex).grid(row=Row,column=Column)

  11. mainloop()
复制代码
最佳答案
2017-4-16 18:06:43
我的理解是每次都给了一个内存地址值,然后新一次赋值的时候,就会清空掉原来的内存地址值。所以只会显示出最后一次的图票。
而且从程序而言,本身把这两个赋值语句放在循环里面就不合理。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-4-15 22:15:30 | 显示全部楼层

回帖奖励 +2 鱼币

本帖最后由 ooxx7788 于 2017-4-15 22:20 编辑

程序本身问题比较大,大改了!
不过这个不能显示步序也没啥意义,不能判断输赢,只能算个意思。
  1. from tkinter import *
  2. import random

  3. window = Tk()
  4. imageo = PhotoImage(file='o.gif')
  5. imagex = PhotoImage(file='cross.gif')
  6. n = random.randint(0, 1)
  7. pos = [0, 1, 2, 3, 4, 5, 6, 7, 8]
  8. for i in range(9):
  9.     if n:
  10.         n = 0
  11.     else:
  12.         n = 1
  13.     p = pos.pop(pos.index(random.choice(pos)))
  14.     Row = p // 3
  15.     Column = p % 3
  16.     Label(window, image=imageo if n == 0 else imagex).grid(row=Row, column=Column)

  17. mainloop()
复制代码

QQ图片20170415221424.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-15 22:30:21 | 显示全部楼层
ooxx7788 发表于 2017-4-15 22:15
程序本身问题比较大,大改了!
不过这个不能显示步序也没啥意义,不能判断输赢,只能算个意思。

看了 你的程序以后发现我只要把
imageo = PhotoImage(file='o.gif')
imagex = PhotoImage(file='cross.gif')
放在循环之前就没问题了,可是还是不懂为什么啊,打开一次图片和打开多次有区别吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-15 22:48:08 | 显示全部楼层
豌图酱 发表于 2017-4-15 22:30
看了 你的程序以后发现我只要把
imageo = PhotoImage(file='o.gif')
imagex = PhotoImage(file='cross. ...

你光把这两句摆外面,并不能保证o和x是轮流走哦。
可能出现下图的情况哦!
QQ图片20170415224716.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-16 07:58:19 From FishC Mobile | 显示全部楼层
ooxx7788 发表于 2017-4-15 22:48
你光把这两句摆外面,并不能保证o和x是轮流走哦。
可能出现下图的情况哦!

哦哦,懂了,不过为什么我放外面就能所有label都显示图片,放循环里面只会显示最后一个啊~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-16 09:28:09 From FishC Mobile | 显示全部楼层
豌图酱 发表于 2017-4-16 07:58
哦哦,懂了,不过为什么我放外面就能所有label都显示图片,放循环里面只会显示最后一个啊~

其实我不会用Tk,不过我认为把图片放在循环里面等于每一轮循环赋值一次,所以后面的就会把前面的赋值覆盖,所以就会只显示最后一个。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-16 17:59:54 | 显示全部楼层
ooxx7788 发表于 2017-4-16 09:28
其实我不会用Tk,不过我认为把图片放在循环里面等于每一轮循环赋值一次,所以后面的就会把前面的赋值覆盖 ...

可是imageo和imagex一直都是赋值这两张图象的嘛,每循环一次就贴了一个图片到标签上然后通过grid放置在固定的地方啊,为什么会覆盖呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-16 18:06:43 | 显示全部楼层    本楼为最佳答案   
我的理解是每次都给了一个内存地址值,然后新一次赋值的时候,就会清空掉原来的内存地址值。所以只会显示出最后一次的图票。
而且从程序而言,本身把这两个赋值语句放在循环里面就不合理。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-16 18:41:03 | 显示全部楼层

回帖奖励 +2 鱼币

没毛病~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-30 19:45:48 | 显示全部楼层

回帖奖励 +2 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-19 23:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表