我目前正在为一个编程类开发一个pythongui版本的Reversi。我已经对游戏逻辑进行了编程,目前我正在尝试使用Tkinter实现GUI。我有一些问题,调整游戏板(根窗口)和它的一切(画布和形状)成比例。这款游戏目前还不错,但我试图让棋盘正确调整大小的一切都没有奏效。相关代码如下。在class OthelloApplication:

def __init__(self, game_state: othello.Othello):

self._game_state = game_state

self._game_state.new_game()

self._game_board = game_state.show_board()

self._root_window = tkinter.Tk()

for row in range(self._game_state.show_rows()):

for col in range(self._game_state.show_cols()):

canvas = tkinter.Canvas(self._root_window, width = 100, height = 100,

borderwidth = 0, highlightthickness = 1,

background = _BACKGROUND_COLOR, highlightbackground = 'black')

canvas.grid(row = row, column = col, padx = 0, pady = 0,

sticky = tkinter.N + tkinter.S + tkinter.E + tkinter.W)

self._root_window.rowconfigure(row, weight = 1)

self._root_window.columnconfigure(col, weight = 1)

self._turn_window = tkinter.Canvas(self._root_window, width = 200,

height = 100, highlightthickness = 0, background = 'white')

self._root_window.bind('', self._on_canvas_clicked)

self._root_window.bind('', self.on_resize)

def draw_game_pieces(self) -> None:

for row in range(self._game_state.show_rows()):

for col in range(self._game_state.show_cols()):

if self._game_board[col][row] == ' ':

pass

else:

canvas = tkinter.Canvas(master = self._root_window, width = 100, height = 100,

borderwidth = 0, highlightthickness = 1,

background = _BACKGROUND_COLOR, highlightbackground = 'black')

canvas.grid(row = row, column = col, padx = 0, pady = 0,

sticky = tkinter.N + tkinter.S + tkinter.E + tkinter.W)

canvas.update()

canvas.create_oval(2, 2, canvas.winfo_width() - 2,

canvas.winfo_height() - 2, fill = self._which_color(col,

row), outline = self._which_color(col, row))

self._root_window.rowconfigure(row, weight = 1)

self._root_window.columnconfigure(col, weight = 1)

def display_turn(self) -> None:

if self._game_state.show_turn() == 'B':

turn = 'black'

else:

turn = 'white'

self._turn_window.grid(row = self._game_state.show_rows() // 2 - 1,

column = self._game_state.show_cols() + 1,

sticky = tkinter.N + tkinter.S + tkinter.E + tkinter.W)

self._turn_info = self._turn_window.create_text(10, 10,

font = 'Helvetica', anchor = 'nw')

self._turn_window.itemconfig(self._turn_info, text = 'Turn = ' + turn)

def on_resize(self, event: tkinter.Event) -> None:

self.draw_game_pieces()

def _which_color(self, col: int, row: int) -> str:

if self._game_board[col][row] == 'B':

return 'black'

elif self._game_board[col][row] == 'W':

return 'white'

def _on_canvas_clicked(self, event: tkinter.Event) -> (int):

print(event.widget.winfo_reqwidth(), event.widget.winfo_reqheight())

print(event.widget.winfo_width(), event.widget.winfo_height())

try:

grid_info = event.widget.grid_info()

move = (int(grid_info["row"]), int(grid_info["column"]))

self._game_state.player_move(move[1], move[0])

self.draw_game_pieces()

self.display_turn()

except AttributeError:

pass

except othello.InvalidMoveError:

print('Error: that wasn\'t a valid move.')

except othello.GameOverError:

print('The game is over.')

def start(self) -> None:

self.draw_game_pieces()

self.display_turn()

self._root_window.mainloop()

draw_game_pieces()方法根据正在绘制的画布的大小在板上的正确空间中绘制适当颜色的圆。在

我对调整大小问题的解决方案是将on_resize()绑定到init方法中的''事件,但这会导致程序在递归周期中崩溃。一般来说,我是新手。为什么on_resize()方法绑定到''导致程序崩溃?在

很抱歉代码混乱,我仍在努力。在

谢谢。在

python控件随窗口变化而适配_Tkinter窗口/控件比例调整相关推荐

  1. python控件随窗口变化而适配_如何实现python tkinter控件随窗口变化?

    不管是对于Java还是对于Python,我们最开始学习的时候,都会碰到关于开发上的窗口设置,如果不设置这个内容,你所呈现的项目效果,是非常不美观的,而往往为了符合美化,大家都会花费很多心思在基础的窗口 ...

  2. python控件随窗口变化而适配_python pyqt5 设置控件随窗体拉伸

    2# -- coding: utf-8 -- ''' [简介] 布局中用到的addStretch函数例子 ''' from PyQt5.QtWidgets import QApplication ,Q ...

  3. MFC小笔记:控件随窗口变化

    一.需求 当窗口大小变化时,如最大化.最小化时,控件位置和大小并没有变化,本文实现此功能. 二.界面 主界面为对话框,有最小化.最大化.关闭等功能. 三.原理 当窗口变化时,响应 OnSize 函数, ...

  4. 使控件大小随窗口变化

    注意: 1.在使用的.cpp和.h中都要添加#include "ResizeControl.h" 2.在类对话框中为使用该功能的对话框类添加一个WM_SIZE消息,,,即是重载On ...

  5. .net OCX 无法获取“****”控件的窗口句柄,不支持无窗口的ActiveX控 新解决方法...

    2019独角兽企业重金招聘Python工程师标准>>> 朋友找我帮原来的软件加一个小功能,程序是用VB.NET 写的. 软件需要与外部串口设备通信,一只带串口功能的压力表. 应该时间 ...

  6. MFC控件随窗口大小变化原理及实现

    本文主要针对MFC的dialog,实现控件随窗口大小变化. 原理:首先获取dialog的初始大小,当窗口发送变动时,调用OnSize事件和方法,计算缩放比例,然后对界面中的所有控件进行缩放和布局. 实 ...

  7. python中与label类似的控件是_python中tkinter的使用(控件整理)(一)

    1.使用tkinter.Tk() 生成主窗口(window=tkinter.Tk()): window.title('标题名')修改框体的名字,也可在创建时使用className参数来命名: wind ...

  8. Python 小白从零开始 PyQt5 项目实战(4)基本控件

    本系列面向 Python 小白,从零开始实战解说应用 QtDesigner 进行 PyQt5 的项目实战. 什么叫从零开始?从软件安装.环境配置开始.不跳过一个细节,不漏掉一行代码,不省略一个例图. ...

  9. Autoit3--检测窗口变化PixelChecksum--软件自动化测试学习笔记

    对于Autoit3不能识别的非标准控件.若想监控程序运行状态,可以参考用PixelChecksum,检测窗口变化情况进行判断. ;============检测窗口发生变化=============== ...

最新文章

  1. 高德API+Python解决租房问题
  2. python 获取mp3时长(时间长度)
  3. html form通过ajax提交表单提交数据,Jquery通过Ajax方式来提交Form表单的具体实现
  4. VPN之DSVPN的介绍
  5. 找到一个全能的免费空间!支持SQL和.net2.0
  6. Python 标准库 —— uuid(生成唯一 ID)
  7. 评价微型计算机总线的性能指标,计算机组成原理学习笔记(3):总线
  8. web通讯录常见问题解答以及增加个性功能
  9. 乐观锁 与 悲观锁 总结
  10. springboot整合视图层之freemarker
  11. go golang 笔试题 面试题 笔试 面试
  12. CAN分析仪:便携式CAN总线分析仪
  13. kylin 维度优化,Aggregation Group,Joint,Hierachy,Mandatory等解析
  14. C语言常见缩写和英文
  15. rfm模型python_使用python实现RFM模型
  16. 2018.8.10Yukimai模拟Day1
  17. 宽带和流量是分开的吗_带宽与宽带的区别。
  18. python中0x是什么意思_弱问下,以0x开头的数值表示什么意思?
  19. 壳与加壳脱壳基础知识
  20. Simple React Snippets快捷

热门文章

  1. Oracle修改密码文件_转载:Oracle修改用户密码
  2. java netty html_源码时代JAVA干货分享|带你用Netty框架实现WebSocket通信
  3. 计算机应用昨早领域,计算机应用-第1章.ppt
  4. html5测试题整理--针对标签的概念性
  5. mysql zip 还原_mysql 压缩还原数据库
  6. java 实现excel样式设置(居中、字体、大小、换行、合并行,列宽、指定特定字符串样式等)
  7. java物业管理系统设计,JAVA物业管理系统设计与实现(论文+源代码)
  8. random模块详解
  9. 起名与选择器~(总结类、持续更新系列)
  10. Day 9 函数的初识1