質問

私は彼らのAPIを介してTumblrに写真をアップロードできるプログラムを書いています、私は(皆さんのおかげで)アップロードを機能させました(皆さんのおかげで)。

画像名を表示するGUIの側面に「Queuebox」を置き、それらはQlistWidgetに保存されます。私はこれを私のメインクラスの「コンストラクター」に入れました:

def __init__(self):
    QtGui.QMainWindow.__init__(self)
    self.setupUi(self)
    self.queueBox.itemClicked.connect(self.displayPhoto)

そして、私はこの方法を持っています:

def displayPhoto(self, item):
    tempName = (item.text())
    print tempName
    self.myLabel.setPixmap(QtGui.QPixmap(_fromUtf8(directory + '\\' + tempName)))  
    ## self.myLabel.pixmap(QPixmap.scaled(aspectRatioMode = Qt.IgnoreAspectRatio))
    ## ^ ^ ^ What do I do with this? How do I set it to maintain aspect ratio?
    ## Currently it says ''NameError: global name 'Qt' is not defined''

これにより、QlabelであるMyLabelに画像が描かれますが、非常にスケーリングされています。

self.myLabel.setScaledContents(True)

私のui_mainwindowクラスでは、falseに変換するとスケーリングを修正しますが、画像がqlabelよりもはるかに大きいため、画像のごく一部しか表示されません。私が望んでいるのは、アスペクト比を維持できることです。そのため、スケーリングと恐ろしいように見えません。

私はこれを見つけました: http://www.riverbankcomputing.co.uk/static/docs/pyqt4/html/qpixmap.htmlそして、それを使用する方法を述べていますが、私のコメントに上記のコードに示されているように、私はそれを動作させることはできません。誰かがこれを使用する方法を知っていますか?もしそうなら、私に例を提供していただけますか、私は検索を試みましたが、私が得た結果のほとんどは、PythonではなくC ++の例です。

ありがとう!

役に立ちましたか?

解決

を取り除きます

self.myLabel.setScaledContents(True)

呼び出します(またはfalseに設定します)。アスペクト比を気にせずにウィジェットをPIXMAPで埋めています。

サイズを変更する必要がある場合 QPixmap, 、あなたが見つけたように、 scaled 必要な方法です。しかし、あなたはそれを間違って呼びかけています。定義を見てみましょう:

QPixmap QPixmap.scaled (self, 
                        int width, 
                        int height, 
                        Qt.AspectRatioMode aspectRatioMode = Qt.IgnoreAspectRatio,
                        Qt.TransformationMode transformMode = Qt.FastTransformation)

この関数の返品タイプはです QPixmap, 、したがって、スケーリングを返します コピー 元のpixmapの。

その後、あなたは必要です width そしてa height, 、PIXMAPの(最大)最終サイズを記述します。

さらに2つのオプションのパラメーター。 aspectRatioMode 井戸のアスペクト比を扱います。 ドキュメンテーション さまざまなオプションとその効果を詳述します。 transformMode スケーリングの実行方法(どのアルゴリズム)が実行されるかを定義します。画像の最終品質を変える可能性があります。おそらくこれは必要ありません。

だから、それをまとめるべきです(あなたは持っている必要があります(Qt 名前空間は中にあります QtCore):

# substitute the width and height to desired values
self.myLabel.setPixmap(QtGui.QPixmap(_fromUtf8(directory + '\\' + tempName)).scaled(width, height, QtCore.Qt.KeepAspectRatio))

または、固定サイズがある場合 QLabel, 、電話することができます .size() そこからサイズを取得する方法:

self.myLabel.setPixmap(QtGui.QPixmap(_fromUtf8(directory + '\\' + tempName)).scaled(self.myLabel.size(), QtCore.Qt.KeepAspectRatio))

ノート: :使用したい場合があります os.path.join(directory, tempName) のために directory + '\\' + tempName 部。

他のヒント

pyqt5コードの変更更新:

上記の答え アバリス 壊れるため、pyqt5アップデートが必要でした。

QPixmap.scaled (self, int width, int height, Qt.AspectRatioMode aspectRatioMode = Qt.IgnoreAspectRatio

維持 self コードでは、トレースバックエラー以下で結果が得られます。

タイプエラー:引数は過負荷の呼び出しと一致しませんでした:scaled(self、int、int、int、aspectratiomode:qt.aspectratiomode = qt.ignoreaspectratio、transformmode:qt.transformationmode = qt.fasttransformation):引数1は予期しないタイプ 'mainui' scaled(self) 、qsize、aspectratiomode:qt.aspectratiomode = qt.ignoreaspectratio、transformmode:qt.transformationmode = qt.fasttransformation):引数1には予期しないタイプ 'mainui'があります。

したがって、これは(「自己」、「QT」なしで)でなければなりません。

QPixmap.scaled (int width, int height, aspectRatioMode = IgnoreAspectRatio

また:

QPixmap.scaled (int width, int height, aspectRatioMode = 0)

keepaspectratio = 4 ...しかし、提供されているように使用されます aspectRatioMode = 4 上記のコードで。楽しみ!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top