2016-03-26 26 views
3

Son kod bloğundan gelen işlevi kullanarak QTextEdit widget'ımın yazı tipini değiştirmeye çalıştığımda, program kod 1 ile anında çöküyor. Bunun nedeni ne olabilir? Sorunuz bu tür platform ve kullandığınız PyQt versiyonu olarak, önemli birçok bilgi yoksun(PyQt) QTextEdit widget'ımın yazı tipini neden değiştiremiyorum?

def aFont(self): 
    previous_font = self.font 
    self.font = QFontDialog().getFont(previous_font) 
    if self.font != previous_font: 
     self.text_edit.selectAll() 
     self.text_edit.setCurrentFont(self.font) 

cevap

3

self.font = QFont("Arial") 

...

self.text_edit = QTextEdit() 
self.setCentralWidget(self.text_edit) 
self.text_edit.setCurrentFont(self.font)  

... ve Tam bir geri izleme. Bununla birlikte, PyQt-5.5 kullandığınızı varsayarak, sorunun olası nedeninde makul bir tahminde bulunmak mümkündür.

PyQt'nin önceki sürümlerinde, belirli işlenmemiş özel durumlar, yalnızca uygulamanın yürütülmesini kesintiye uğratmadan stderr'e yazdırılan bir iz bırakmaya neden olur. Ama bu normal bir python betiğinin nasıl davranacağı değildir. Bu nedenle davranış, PyQt-5.5'te düzeltilmiştir, çünkü uygulama, işlenmemiş bir istisna ile karşılaşıldığında derhal iptal edilecektir (bkz. PyQt5 belgelerinde Incompatibilities with Earlier Versions). "Bu yüzden uygulama değil

Traceback (most recent call last): 
    File "test.py", line 21, in aFont 
    self.text_edit.setCurrentFont(self.font) 
TypeError: QTextEdit.setCurrentFont(QFont): argument 1 has unexpected type 'tuple' 
Aborted (core dumped) 

:

ben size uygulamayı çalıştırmak gördüğünüz bilmiyorum (ben Windows üzerinde farzederek söylüyorum), ancak Linux üzerinde bunu gördüm kilitlenme "- işlenmeyen özel durumla karşılaştığında iptal olur. özel hata bu hat kaynaklanır:

self.font = QFontDialog().getFont(previous_font) 

getFont çünkü döner (ok bir boolean kullanıcının Tamam tıklandığında veya iptal olup olmadığını gösteren bir) tuple font, ok. Yani sadece bu gibi görünmek hat değiştirmek gerekir.

self.font, ok = QFontDialog().getFont(previous_font) 
+1

Ya da biz sadece yazı gerekiyorsa - 'self.font = QFontDialog() getFont (previous_font) [0]' –

İlgili konular