gpt4 book ai didi

Python - 将 Tkinter 图形添加到 PyQt 小部件

转载 作者:太空宇宙 更新时间:2023-11-03 15:25:05 25 4
gpt4 key购买 nike

我们目前有一个使用 PyQt 创建的功能齐全的 Gui。我的搭档在 Tkinter 中编写了一个绘制数据集图形的函数。我的问题是,我们如何将两者结合起来以便它们协同工作?

这是绘图函数:

def createGraph(self):
import tkinter as tk

# Send in data as param, OR
#data = [17, 20, 15, 10, 7, 5, 4, 3, 2, 1, 1, 0]

# Recieve data within function
s.send("loadgraph")

inputString = repr(s.recv(MSGSIZE))
#inputString = "-20 15 10 7 5 -4 3 2 1 1 0"
print(inputString)
data = [int(x) for x in inputString.split()]

root = tk.Tk()
root.title("FSPwners")
screen_width = 400
screen_height = 700
screen = tk.Canvas(root, width=screen_width, height=screen_height, bg= 'white')
screen.pack()

# highest y = max_data_value * y_stretch
y_stretch = 15
# gap between lower canvas edge and x axis
y_gap = 350
# stretch enough to get all data items in
x_stretch = 10
x_width = 20
# gap between left canvas edge and y axis
x_gap = 20


for x, y in enumerate(data):
# calculate reactangle coordinates (integers) for each bar
x0 = x * x_stretch + x * x_width + x_gap
y0 = screen_height - (y * y_stretch + y_gap)
x1 = x * x_stretch + x * x_width + x_width + x_gap
y1 = screen_height - y_gap
# draw the bar
print(x0, y0, x1, y1)
if y < 0:
screen.create_rectangle(x0, y0, x1, y1, fill="red")
else:
screen.create_rectangle(x0, y0, x1, y1, fill="green")

# put the y value above each bar
screen.create_text(x0+2, y0, anchor=tk.SW, text=str(y))

root.mainloop()

当该方法自行运行时,它会创建一个带有图形的弹出框。现在我们希望它在当前 gui 中按下按钮时创建一个弹出图形。我们怎样才能让它发挥作用?如果我们在 GUI 中单击按钮时调用 createGraph(),我们会收到错误:无法识别的选择器发送到实例 x009x...

问题是什么?谢谢!

最佳答案

这是一个 PyQt 端口:

from PyQt4 import QtCore, QtGui

class Graph(QtGui.QWidget):
def __init__(self, data, parent=None):
QtGui.QWidget.__init__(self, parent)
self._data = data
self.resize(400, 700)
self.setWindowTitle('FSPwners')
self.setAutoFillBackground(True)
self.setBackgroundRole(QtGui.QPalette.Base)

def paintEvent(self, event):
painter = QtGui.QPainter()
painter.begin(self)

screen_width = self.width()
screen_height = self.height()

# highest y = max_data_value * y_stretch
y_stretch = 15
# gap between lower canvas edge and x axis
y_gap = 350
# stretch enough to get all data items in
x_stretch = 10
x_width = 20
# gap between left canvas edge and y axis
x_gap = 20

for x, y in enumerate(self._data):
# calculate reactangle coordinates (integers) for each bar
x0 = x * x_stretch + x * x_width + x_gap
y0 = screen_height - (y * y_stretch + y_gap)
x1 = x0 + x_width
y1 = screen_height - y_gap
if y < 0:
painter.setBrush(QtCore.Qt.red)
else:
painter.setBrush(QtCore.Qt.green)
painter.drawRect(QtCore.QRectF(
QtCore.QPointF(x0, y0), QtCore.QPointF(x1, y1)))
print (x0, y0, x1, y1)

# put the y value above each bar
painter.drawText(x0 + 2, y0 - 2, str(y))

painter.end()

if __name__ == '__main__':

import sys
app = QtGui.QApplication(sys.argv)
# data to be graphed
data = [-20, 15, 10, 7, 5, -4, 3, 2, 1, 1, 0]
window = Graph(data)
window.show()
sys.exit(app.exec_())

关于Python - 将 Tkinter 图形添加到 PyQt 小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8497142/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com