[英]How do I convert a tuple within a list (within a tuple) to a list?
我環顧四周,找不到真正有幫助的東西。
我使用的代碼如下:
xy = (event.xdata, event.ydata)
a = self.charges.get_charges()
a[self.closest_k][1] = xy
我在搞一個GUI,我的問題是我需要用光標的位置“移動” GUI上對象的位置。 xy返回我需要作為數組的一對坐標, self.closest_k
返回一個數字(有許多對象,而self.closest_k
返回我要移動的對象的索引)。
a = [(1.0, array([ 1., 0.])), (1.0, array([-1., 0.])), (-1.0, array([ 0., -1.])), (-1.0, array([ 0., -1.]))]
問題是元組是不可變的,並且由於這是一個賦值,所以我不允許更改函數get_charges()
。 事先我更換了:
a = self.charges.get_charges()
a[self.closest_k][1] = xy
與:
self.charges._pos[self.closest_k, :] = xy
但是在執行靜態代碼分析后,我獲得了警告消息MyMplWidget.on_mouse_move: Access to a protected member _pos of a client class
。 因此,我想尋求一種解決方法,我考慮過將元組轉換為列表,但並沒有將元組內的元組轉換為列表。
編輯1:
好的,這是對我以前的改進。 每當我嘗試拖動對象時,運行代碼都不會返回錯誤。 這是發生了什么:
[(1.0, array([ 1., 0.])), (1.0, array([-1., 0.])), (-1.0, array([ 0., 1.])), (-1.0, array([ 0., -1.]))]
(-1.0, (-0.00071672257102850523, -1.5525644333591355))
因此,我試圖拖動具有原始位置[0,-1]的對象,這樣做的過程幾乎就像創建了列表的新元素一樣,它在我拖動時會覆蓋原始位置,但是一旦我停止拖動,該對象就會恢復其原始位置。
(-1.0, (-0.00071672257102850523, -1.609902239041312))
(-1.0, array([ 0., -1.]))
在該示例中,我拖動了原始位置為[0,-1]的對象。 我放開對象后,它就會恢復其原始位置。 (這實際上並沒有在GUI上顯示,對象根本沒有移動,但這是我可以處理的不同功能的問題)。 我認為目前我的編碼工作方式(關於繪制GUI)是處理對象位置的函數期望其原始位置發生變化。 但是原始位置有點像“鎖定”在元組內部(抱歉,術語錯誤)。 我想我真的不知道該怎么辦。
如果我正確地理解了這個問題,我認為您應該只替換整個元素,而不是嘗試修改內部元組中的一個條目。 所以
a[self.closest_k] = (a[self.closest_k][0], xy)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.