Python Tkinter не загружается полностью, если не нажата клавиша ctrl - PullRequest
0 голосов
/ 11 июля 2020

Я использую Ubuntu 18.04 с python 3.8.

Это проблема, с которой я сталкиваюсь с тех пор, как начал использовать Tkinter.

Каждый раз, когда я пишу код, по какой-то причине , GUI зависает при загрузке. Я предполагаю, что это потому, что программа, которую я собираюсь написать, включает в себя множество кнопок (в частности, 15x15 = 225). Однако вместо того, чтобы загружаться медленнее или что-то еще, окно GUI отказывается отображаться.

Единственное «псевдорешение», которое я случайно обнаружил, - это нажатие клавиши ctrl.

Почему это происходит и почему нажатие клавиши ctrl решает эту проблему?

Вот код: Для запуска установите tkinter и введите python3 controller.py

model.py

class Model:
    def __init__(self):
        '''
        '''

controller.py

 from model import Model
 from view import View
 
 class Controller:
     def __init__(self):
         self.model = Model()
         self.view = View(self)
     def main(self):
         self.view.main()
 if __name__ == '__main__':
     scrabble = Controller()
     scrabble.main()

view.py

 import tkinter as tk
 from tkinter import ttk
 
 class View(tk.Tk):
     PAD = 15
     def __init__(self,controller):
         super().__init__()
         self.controller = controller
         self.value_var = tk.StringVar()
         self.title('Scrabble')
         self._make_main_frame()
         self._make_buttons()

     def main(self):
         self.mainloop()
 
     ##Private Methods
     def _make_main_frame(self):
         self.main_frm = ttk.Frame(self)
         self.main_frm.pack(padx=self.PAD, pady=self.PAD)
 
     def _make_buttons(self):
         outer_frm= ttk.Frame(self.main_frm)
         outer_frm.pack()
 
         frm = ttk.Frame(outer_frm)
         frm.pack()
         btns_row = 0 
         for i in range(self.PAD*15):
             if btns_row == self.PAD:
                 frm = ttk.Frame(outer_frm)
                 frm.pack()
                 btns_row = 0
             btn = ttk.Button(frm, text=i)
             btn.pack(side='left')
             btns_row += 1

1 Ответ

0 голосов
/ 04 августа 2020

Интересно, что когда я обновил свой ubuntu с 18.04 до 20.04, эта проблема, похоже, исчезла. Из любопытства увеличил количество загружаемых кнопок. После этого проблема с поведением c вернулась.

Недавно у меня появилась возможность проверить, существует ли эта проблема на других компьютерах. Похоже, что другие компьютеры (например, Acer) прямо не загружаются и кажутся зависшими навсегда (или еще не нашли способа избежать зависания).

Следовательно, я думаю, что проблема в в самом tkinter (или, возможно, он не должен был использоваться таким образом). На данный момент ничего не остается, кроме как избегать использования более 200 кнопок (по крайней мере, в ubuntu tkinter).

...