亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

實現窗口中對象的對齊,從另一個.py文件添加圖形

實現窗口中對象的對齊,從另一個.py文件添加圖形

Helenr 2022-09-20 17:51:01
所以,我想問你關于在PyQt5中更好地組織多個,,圖。以前,我得到了一些幫助,使用網格來實現我放入的對象更好地對齊。buttonsTextBoxMy Window但是,我試圖編碼的結局仍然有點遠。以下是我到目前為止所得到的:from PyQt5 import QtWidgets, QtCorefrom PyQt5.QtWidgets import *import sysclass Okno(QMainWindow):    def __init__(self):        super(Okno, self).__init__()        self.setGeometry(500, 500, 900, 500)        self.setWindowTitle("My window")        self.button1 = QtWidgets.QPushButton()        self.button2 = QtWidgets.QPushButton()        self.TextBox1 = QLineEdit(self)  # Parameter self - add text box to my Window "Okno"        self.TextBox2 = QLineEdit(self)        self.TextBox3 = QLineEdit(self)        self.TextBox4 = QLineEdit(self)   # Baudrate        self.TextBox5 = QLineEdit(self)   # Parity        self.TB_TEMP_IN = QLineEdit(self)   # Temp_IN        self.TB_TEMP_OUT = QLineEdit(self)   # Temp_OUT        self.label1 = QtWidgets.QLabel()  # TextBox1, pressure_IN        self.label2 = QtWidgets.QLabel()        self.label3 = QtWidgets.QLabel()        self.label4 = QtWidgets.QLabel()  # TextBox3, pressure_OUT        self.label_TEMP_IN = QtWidgets.QLabel()        self.label_TEMP_OUT = QtWidgets.QLabel()        self.iniUI()在添加更多對象時,我注意到的一件事是很難組織起來。如果我正確理解它的工作原理,我必須將網格擴展到10 x 6,但是對齊方式(左,中,右)不會以對齊順序對對象進行排序,例如由絕對邊界定義的行/列。Grid至于按鈕,文本框,...我應該能夠對它們進行編程,我只是沒有太多使用Windows應用程序的經驗,而主要是做控制臺應用程序。但是,我應該如何將兩個圖形添加到中?我正在使用matplotlib.pyplot將它們繪制在另一個.py文件中,我使用熊貓從.xls文件加載部分數據,另一部分(數據輸出)將通過串行(RS232)或TCP / IP接口接收。我必須實時繪制它們并能夠存儲它們(.txt或.csv,這并不重要)。My Window您能否給我一些關于選擇“我的窗口”的正確概念的提示,以實現我在下面附加的示例,并能夠在將來“輕松”添加其他對象(如有必要)。我絕對認為窗口中的對象越多,就越需要更好的組織,因為方法和類都變得很長。iniUI(self)Okno(QMainWindow)我舉了一個簡單的例子來說明我想要實現的目標:
查看完整描述

1 回答

?
紫衣仙女

TA貢獻1839條經驗 獲得超15個贊

在將微件添加到布局時設置構件的對齊方式不會影響構件的對齊方式,而只會影響它們在布局提供的空間中的對齊方式。此外,許多小部件會自動嘗試擴展自己(如 QLabel 或項目視圖)。

例如,QLabel具有文本的左/垂直居中的默認對齊方式,因此您需要設置對齊方式,但如果其他小部件允許,它仍將嘗試擴展其可用空間。

要獲得所需的內容,您必須考慮小部件之間的間距,它們(這表示小部件在布局中使用時對其大小的“意愿”,如果它具有固定的大小,是否可以增長/擴展,是否可以縮小等)。sizePolicy

由于您希望列之間留出一些空間,因此最簡單的方法是在布局中保留空列,并使用 setColumnStretch() 在這些列上設置拉伸因子,以便它們嘗試盡可能多地擴展。

最后,對于復雜的結構,最好使用嵌套布局,這意味著您將為小部件設置一個主布局,并向其添加“子”布局,以便每個“部分”都有自己的布局管理器,獨立于其他布局。在下面的示例中,我實現了如下結構:

  +-------------- main vertical layout ---------------+

    |                                                   |

    |  +------------ button grid layout -------------+  |

    |  |title|    |(empty)|      |(empty)|     |title|  |

    |  +-----+----+-------+------+-------+-----+-----+  |

    |  |label|edit|       |input |       |label|edit |  |

    |  +-----+----+-------+------+-------+-----+-----+  |

    |  |label|edit|       |input |       |label|edit |  |

    |  +-----+----+-------+------+-------+-----+-----+  |

    |  |label|edit|       |input |       |label|edit |  |

    |  +-----+----+-------+------+-------+-----+-----+  |

    +---------------------------------------------------+

    |                                                   |

    |  +---------- graph horizontal layout ----------+  |

    |  |                      |                      |  |

    |  |       left graph     |      right graph     |  |

    |  |                      |                      |  |

    |  +----------------------+----------------------+  |

    +---------------------------------------------------+

    |                                                   |

    |  +--------- button horizontal layout ----------+  |

    |  |        |                           |        |  |

    |  | button |         (stretch)         | button |  |

    |  |        |                           |        |  |

    |  +--------+---------------------------+--------+  |

    +---------------------------------------------------+ 

以下是它的顯示方式:

這就是代碼。請注意,我從初始化中刪除了小部件創建(如果您使用函數,那么在其他地方創建它們沒有多大意義)。initUi


from PyQt5 import QtWidgets, QtCore

from matplotlib.figure import Figure

from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas

import sys



class Okno(QtWidgets.QMainWindow):

    def __init__(self):

        super(Okno, self).__init__()

        self.setGeometry(500, 500, 900, 500)

        self.setWindowTitle("My window")

        self.iniUI()


    def iniUI(self):

        w = QtWidgets.QWidget()

        self.setCentralWidget(w)


        mainLayout = QtWidgets.QVBoxLayout(w)


        grid = QtWidgets.QGridLayout()

        mainLayout.addLayout(grid)


        self.dataInputLabel = QtWidgets.QLabel('Data Input')

        grid.addWidget(self.dataInputLabel, 0, 0)

        self.dataInputLabel.setStyleSheet('color: red')


        portSettingLabel = QtWidgets.QLabel('Port setting', alignment=QtCore.Qt.AlignCenter)

        grid.addWidget(portSettingLabel, 0, 3)


        self.dataOutputLabel = QtWidgets.QLabel('Data Output', alignment=QtCore.Qt.AlignRight|QtCore.Qt.AlignVCenter)

        grid.addWidget(self.dataOutputLabel, 0, 6)

        self.dataOutputLabel.setStyleSheet('color: blue')


        # set the vertical policy to Maximum for labels, so they don't try to

        # expand themselves if there's more available space

        for label in (self.dataInputLabel, portSettingLabel, self.dataOutputLabel):

            label.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Maximum)


        grid.addWidget(QtWidgets.QLabel('Pressure [kPa]'), 1, 0)

        self.inputPressure = QtWidgets.QLineEdit(readOnly=True)

        grid.addWidget(self.inputPressure, 1, 1)


        grid.addWidget(QtWidgets.QLabel('Temperature [K]'), 2, 0)

        self.inputTemp = QtWidgets.QLineEdit(readOnly=True)

        grid.addWidget(self.inputTemp, 2, 1)


        grid.addWidget(QtWidgets.QLabel('Humidity [%]'), 3, 0)

        self.inputHumidity = QtWidgets.QLineEdit(readOnly=True)

        grid.addWidget(self.inputHumidity, 3, 1)


        self.portEdit = QtWidgets.QLineEdit(placeholderText='Enter port')

        grid.addWidget(self.portEdit, 1, 3)

        self.baudEdit = QtWidgets.QLineEdit(placeholderText='Baudrate')

        grid.addWidget(self.baudEdit, 2, 3)

        self.parityEdit = QtWidgets.QLineEdit(placeholderText='Parity')

        grid.addWidget(self.parityEdit, 3, 3)


        grid.addWidget(QtWidgets.QLabel('Pressure [kPa]'), 1, 5)

        self.outputPressure = QtWidgets.QLineEdit(readOnly=True)

        grid.addWidget(self.outputPressure, 1, 6)


        grid.addWidget(QtWidgets.QLabel('Temperature [K]'), 2, 5)

        self.outputTemp = QtWidgets.QLineEdit(readOnly=True)

        grid.addWidget(self.outputTemp, 2, 6)


        grid.addWidget(QtWidgets.QLabel('Humidity [%]'), 3, 5)

        self.outputHumidity = QtWidgets.QLineEdit(readOnly=True)

        grid.addWidget(self.outputHumidity, 3, 6)


        grid.setColumnStretch(2, 1)

        grid.setColumnStretch(4, 1)


        graphLayout = QtWidgets.QHBoxLayout()

        mainLayout.addLayout(graphLayout)

        # here insert your graphs...

        self.graphLeft = FigureCanvas(Figure())

        graphLayout.addWidget(self.graphLeft)

        self.graphRight = FigureCanvas(Figure())

        graphLayout.addWidget(self.graphRight)


        buttonLayout = QtWidgets.QHBoxLayout()

        mainLayout.addLayout(buttonLayout)


        self.openButton = QtWidgets.QPushButton('Open file')

        self.openButton.setMinimumWidth(150)

        self.openButton.clicked.connect(self.open_file)

        buttonLayout.addWidget(self.openButton)


        # add an empty "stretch", which acts as an expanding spacer on box layouts

        buttonLayout.addStretch()


        self.exitButton = QtWidgets.QPushButton('Exit')

        self.exitButton.clicked.connect(self.close)

        buttonLayout.addWidget(self.exitButton)

最后,考慮使用Qt Designer,這對于創建復雜的布局非常有用(或者,如果您仍然想通過代碼完成所有操作,則至少在設計它們的過程中可視化它們)。請注意,在這種情況下,您應該遵循使用設計器的建議準則(最重要的是,永遠不要編輯使用實用程序生成的python文件),或者使用模塊中的(其中是要使用ui設置的小部件/窗口)。pyuicloadUi('yourguifile.ui', self)selfPyQt5.uic

查看完整回答
反對 回復 2022-09-20
  • 1 回答
  • 0 關注
  • 83 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號