python控件隨窗口變化而適配_Tkinter窗口/控件比例調整

我目前正在為一個編程類開發一個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()方法綁定到''導致程序崩潰?在

很抱歉代碼混亂,我仍在努力。在

謝謝。在

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/373854.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/373854.shtml
英文地址,請注明出處:http://en.pswp.cn/news/373854.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java遞歸基礎

對于那些不知道遞歸是什么的人(并且像個笑聲一樣),請單擊以下鏈接:Google搜索:遞歸,然后單擊“您的意思是……”項。 希望您終于弄清楚了遞歸是指其自身的任何內容(如果不是,那么您可…

我是最棒的,我一定會成功!

有人曾經做過這樣一個實驗:他往一個玻璃杯里放進一只跳蚤,發現跳蚤立即輕易地跳了出來。再重復幾遍,結果還是一樣。根據測試,跳蚤跳的高度一般可達它身體的400倍左右,所以說跳蚤可以稱得上是動物界的跳高冠軍。     …

頭部ct能檢查出什么_【安全用藥】做CT檢查時應注意什么?

點擊藍字 關注我們安安徽徽,你知道做CT檢查時應注意什么?上腹部CT檢查前患者至少禁食6小時、檢查前15分鐘喝溫開水充盈胃部、CT檢查時,患者會受到一定量X射線輻射,應避免過度掃描......本期安全用藥,大家一起來了解了解…

JAXB,SAX,DOM性能

這篇文章探討了使用多種不同方法將XML文檔編組為Java對象的性能。 XML文檔非常簡單。 它包含一個Person實體的集合。 <?xml version"1.0" encoding"UTF-8" standalone"yes"?> <persons><person><id>person0</id>…

虛擬機Linux圖形界面配置NAT-橋接

點開“虛擬機->設置->橋接模式&#xff08;勾選復制物理網絡連接狀態&#xff09;->確認” 點擊“右上角扇形網絡圖標->Edit Connections->Wired->選中->Delete->Add->IPv4 Settings->Method(Manual)->Add->輸入IP&#xff0c;子網掩碼&am…

年輕人應該謹記的十點

有個朋友的孩子今年大學畢業&#xff0c;托我幫他找個“好工作”&#xff0c;而且再三強調&#xff0c;這關系到孩子的前途命運&#xff0c;要我一定要全力以赴。他&#xff0c;一個非名牌大學的計算機網絡專業應屆畢業生&#xff0c;沒有工作經驗&#xff0c;他能找一個什么樣…

python自動化構建工具_Python自動化構建工具scons使用入門筆記

這段時間用到了scons&#xff0c;這里總結下&#xff0c;也方便我以后查閱。一、安裝sconsLinux環境(以CentOS為例)1、yum安裝yum install scons2、源碼安裝下載scons&#xff1a;http://http://jaist.dl.sourceforge.net/project/scons/scons/2.3.0/scons-2.3.0.zip安裝scons&…

Java 8狀態更新

即將到來的Java SE 8發行版的兩大新語言功能是Lambda Expressions和Modularity。 對于這兩者&#xff0c;這些天的狀態更新已經發布。 我會與您共享鏈接&#xff0c;因此您可能會在假期中通讀它們 Oracle計劃在2013年中期發布Java SE 8。 Lambda項目 Lambda項目以及JSR-335希望…

java 18 - 6 TreeMap嵌套使用

HashMap嵌套HashMap   動物     犬類         哈士奇   2         薩摩耶   1     貓類        波斯貓   2        加菲貓   3 先存儲元素&#xff0c;然后遍歷元素 1 package map_son;2 3 import java.util.HashMap;4 import…

程序設計語言

程序設計語言使用于書寫計算機程序的語言。程序設計語言有3個方面的因素&#xff0c;即語法&#xff0c;語義和語用。語法標識程序的結構或形式。語義表示程序的含義。語用表示程序與使用者的關系。 程序設計語言的發展史 程序的復雜性度量 1&#xff0c;代碼行度量法 出錯率&a…

python集合類型是一種具體的數據類型_Python3基礎語法之集合類型

set也是一種組合數據類型&#xff0c;支持成員關系操作(in)、對象大小計算操作符(len())&#xff0c;并且是iterable。集合數據類型至少提供一個set.isdisjoin()方法&#xff0c;支持比較&#xff0c;也支持為邏輯操作(在集合用于聯合、交叉等上下文中使用)。只有可哈希運算的對…

Linux 安裝之U盤引導

說到裝系統最簡單的方法無非就是找個系統安裝光盤來然后就一步一步慢慢的安裝。簡單是簡單但好似大多數人好像都木有Linux的安裝光盤。因此只能用U盤來模擬光盤的功能來裝系統咯。 電腦上裝有Windows 7現要裝Linux變雙系統。 安裝Linux前的準備&#xff1a; 1、電腦上分出空閑的…

OSGi:簡介

為基于Java的系統創建的OSGi提供了模塊化系統的框架。 OSGi使得可以定義每個單獨模塊與其他模塊的依賴關系&#xff0c;并使用戶可以控制生命周期并動態更改系統的每個組件。 OSGi是一個規范&#xff0c;最常見的實現可以算作Equinox &#xff0c; Apache Felix和Knoplerfish 。…

一起動手打造個人娛樂級linux

我們使用電腦&#xff0c;一直以來用的都是windows&#xff0c;但是對于像我這種愛折騰的人來說&#xff0c;嘗試使用linux系統應該是一種不錯的體驗。說到linux&#xff0c;許多人可能都沒聽過&#xff0c;或者知道的人對它印象是這樣的&#xff1a; 然而&#xff0c;linux發展…

PostgreSQL數據類型

http://blog.csdn.net/neo_liu0000/article/details/6254086 第六章 數據類型 6.1概述 PostgreSQL 提供了豐富的數據類型。用戶可以使用 CREATE TYPE 命令在數據庫中創建新的數據類型。PostgreSQL 的數據類型被分為四種&#xff0c;分別是基本數據類型、復合數據類型、域和偽類…

centos 卸載ffmpeg_CentOS Linux 操作系統安裝 FFmpeg 教程

FFmpeg 是一個非常熱門的開源項目&#xff0c;用來編解碼音頻視頻流&#xff0c;被廣泛用于各種流服務中。本教程在 CentOS 6、7、8 上面都可以使用&#xff0c;用來安裝 FFmpeg 軟件。一、安裝前需求一個 sudo 賬戶&#xff0c;一般都是默認 root 賬戶即可。1、CentOS 8安裝所…

Linux 火狐瀏覽器安裝Flash插件

Linux系統安裝完畢后&#xff0c;發現火狐瀏覽器視頻播放不了而且總是提示安裝Flash。而按火狐瀏覽器上的提示Flash插件安裝總是失敗&#xff0c;木有辦法只能手動安裝Flash插件啦。 到Flash官網&#xff1a;http://get.adobe.com/cn/flashplayer/ 下載系統對應的Flash插件&…

按匯總分組/多維數據集

時不時地&#xff0c;您會遇到一個使您達到SQL限制的要求。 我們中的許多人可能會提早放棄并使用Java / [或您的語言]計算內容。 相反&#xff0c;使用SQL可能是如此簡單快捷。 如果您使用的是高級數據庫&#xff0c;例如DB2 &#xff0c; Oracle &#xff0c; SQL Server &…

TCPUDP

TCP(傳輸控制協議) 建立連接&#xff0c;形成傳輸數據的通道在連接中進行大數據傳輸&#xff08;數據大小不受限制&#xff09;通過三次握手完成連接&#xff0c;是可靠協議&#xff0c;安全送達&#xff08;三次握手向服務器發送請求&#xff0c;響應請求回復&#xff0c;發送…

Windows和linux雙系統——修改默認啟動順序

電腦上裝了Windows 7和Ubantu雙系統&#xff0c;由于Linux系統用的次數比較少并且還是默認的啟動項對此很不能容忍&#xff0c;因此得修改Windows為默認的啟動項。 由于電腦上的系統引導程序是GRUB&#xff0c;因此修改當然也就落到Linux系統上啦。 修改/boot/grub/grub.cfg該文…